在 dplyr 管道中调用任意函数时,将当前组中的所有列作为 tibble 或 data.frame 发送到函数的首选方法是什么?
在下面的例子中,mean_B
是一个简单的例子,我知道在调用函数之前需要什么。mean_B_fun
给出了错误的答案(与我想要的相比——我想要组内的平均值),并且mean_B_fun_ugly
给出了我想要的,但这似乎是一种低效(而且丑陋)的方式来获得我想要的效果。
我想对任意列进行操作的原因是在实践中,我正在采取my_fun
在下面的示例中,我不知道用户需要先验操作的列。
library(dplyr)
my_fun <- function(x) mean(x$B)
my_data <-
expand.grid(A=1:3, B=1:2) %>%
mutate(B=A*B) %>%
group_by(A) %>%
mutate(mean_B=mean(B),
mean_B_fun=my_fun(.),
mean_B_fun_ugly=my_fun(as.data.frame(.)[.$A == unique(A),,drop=FALSE]))
这是我的答案,不知道要计算平均值的列。
expand.grid(A=1:3, B=1:2) %>%
mutate(B=A*B) %>% nest(-A) %>%
mutate(means = map(.$data, function(x) colMeans(x)))
A data means
1 1 1, 2 1.5
2 2 2, 4 3
3 3 3, 6 4.5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)