在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