2017-12-08 11 views
0

名前がxと変数名yのときに結果が集計されるように、2つのパイプを持つ関数を書くのは初めてですデータに結合され、削除されます。書かれた機能を実行すると、キャプション付きのエラーメッセージが表示され続け、問題が何であるか分かりません。grouped_df_impl(data、unname(vars)、drop)のエラー:

mrr <- function(x, y){ 
    x <- data %>% 
    group_by(y) %>% 
    summarize(n=n(), 
     sum=sum(unit_sales)) 
data <- data %>% 
    left_join(x, by="y") %>% 
    mutate(str_c(x,y))=(sum-unit_sales)/(n-1) %>% 
    select(-one_of(n, sum)) %>% 
    rm(x) 
} 

私は検索ボックスにエラーメッセージを与えたとき、私は、関連する結果を見つけましたが、答えは私の問題とは関係ありませんでした。あなたが思考を持っているなら私に知らせてください。

答えて

0

2番目のパイプの突然変異体の左側にstr_cがあります。 dplyrは非標準的な評価を使用していますが、必要なものを達成するためにいくつかのツールを使用する必要があります。同様の問題については、use dplyr mutate() in programmingを参照してください。

+0

こんにちはrussellpierce、あなたの提案に感謝します。この関数は機能しますが、実行には時間がかかります。 – FannieY

1

ここではかなりのことが起こっています。

まず、関数にxを入力する必要はありません。すぐに上書きするためです。あなたがデータを入力しようとしているのかどうかはわかりません。

次に、データセットにyが存在しないため、group_byは機能しません。yの内容はヘッダーの名前です。 group_by_()を使ってこの問題を解決することができます。

その後、あなたのmutateコマンドは壊れています。 mutate(str_c(x,y))は、()が閉じているため完全なmutate文です。また、str_c(x、y)はデータフレームxを取り込み、y内の文字と連結して単一の文字を取り出しようとしています...これはデータフレームを外に出して、悪化させてエラーを出します。列名を指定するほうが簡単です。

同じ突然変異体では、=(sum-unit_sales)/(n-1)のエラーが発生することがあります。 n = 1の場合、ゼロ除算エラー出力はNaNになります。あなたが望むなら、これを残すことができます。あなたの方程式が実際に何をしているのか理解するだけです。

が近づいて、-one_of()コマンドだけではなく、列名(文字のベクトルが必要です。あなたはselect(-n,-sum)を行うことができますいずれか、またはあなたがselect(-one_of(c("n", "sum")))を行うことができます。

最後に、あなたが本当にrm(x)を使用する必要はありません私は列の名前を推測していた機能が、とにかく動作して行われたときに変数が削除されますので。

あなたは私のサンプルデータセットを与えなかったので、...あなたの名前は異なるものになります。


data <- data.frame(d1 = runif(n=10,min=1,max=10), 
      d2 = runif(n=10,min=1,max=10), 
      unit_sales = runif(n=10,min=1,max=10)) 

mrr <- function(data, y){ 
    x <- data %>% 
    group_by_(.dots = y) %>% 
    summarize(n=n(), 
    sum=sum(unit_sales)) 
    data <- data %>% 
    left_join(x, by=y) %>% 
    mutate(someCol=(sum-unit_sales)/(n)) %>% 
    select(-one_of(c("n", "sum"))) #%>% 
    # rm(x) 
} 

(mrr(data,"d2")) 
+0

こんにちはアダム、コードと一緒に詳細な説明をいただきありがとうございます。この関数はUQ()と一緒に動作し、:= russellpierceによって提案されます。関数mrr(data、 "d2")を実行するために余分な括弧が必要な特別な理由はありますか? – FannieY

+1

ああ、いいえ。 extra(mrr())は結果をコンソールウィンドウに表示するだけです。 –