在调用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]))
答案 0 :(得分:0)
这是我的答案,不知道您想要计算平均值的列。
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