ここではかなりのことが起こっています。
まず、関数に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"))
こんにちはrussellpierce、あなたの提案に感謝します。この関数は機能しますが、実行には時間がかかります。 – FannieY