在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))'來調用它,或者如果你想它會遍歷所有列'data%>%group_by(V1)%>%mutate_all(funs(func_a))',除非您希望它在沒有告訴它的情況下在「V2」上運行?在這種情況下,您可能需要使用'lazyval'軟件包。 –
謝謝大衛,我仍然爲此付出了一點努力,但它很有效。很高興,我會接受你的答案作爲解決方案。 – MaHo