dplyr
では、前に選択したグループに対して条件付き関数を適用したいと考えています。ただし、関数は常に完全なデータに対して計算されます。最小限の例:dplyrのグループ化と関数
func_a = function(data_a) {
value = mean(data_a$V2)
return(value)
}
data = as.data.frame(cbind(c("a","a","a","b","b","b"), c(1,2,3,4,5,6)))
data$V2=as.numeric(data$V2)
data V1 V2 a 1 a 2 a 3 b 4 b 5 b 6
o = data %>% group_by(V1) %>% dplyr::mutate(test = func_a(.))
o$test
[1] 3.5 3.5 3.5 3.5 3.5 3.5
私が期待しているだろう
/希望:
[1] 2 2 2 5 5 5
平均機能がプリミティブ一例であり、dplyr::mutate(test = mean(V2))
が仕事をするだろう、明らかに。しかし、そのように使用できない他の機能があります。
この質問の主なポイントは、データフレームのスライスを全体の関数ではなく関数に転送する方法です。
を与え、次のように適用することができない機能があるので、はい、それは必見です。 – MaHo
関数を誤って記述しました。それは 'func_a = function(x)mean(x)'のようなものでなければならず、 'data%>%group_by(V1)%>%mutate(test = func_a(V2))'を使って、あなたがあなたにそれを伝えなくても 'V2'で実行させたいのでない限り、すべてのcols' data%>%group_by(V1)%>%mutate_all(funs(func_a)) 'その場合、おそらく 'lazyval'パッケージを使いこなす必要があります。 –
Davidさん、ありがとう、私はまだこれの論理で少し戦っていますが、それは動作します。幸いにも、私はあなたの答えを解決策として受け入れます。 – MaHo