我们如何在group_by()
之后使用自定义功能?
我检查了类似帖子(1,2和3),但我当前的代码为所有群组返回了相同的值。
> data
village A Z Y
<chr> <int> <int> <dbl>
1 a 1 1 500
2 a 1 1 400
3 a 1 0 800
4 b 1 0 300
5 b 1 1 700
z <- 1
data %>%
group_by(village) %>%
summarize(Y_village = Y_hat_village(., z))
Y_hat_village <- function(data_village, z){
# Calculate the mean for a specific z in a village
data_z <- data_village %>% filter(Z==get("z"))
return(mean(data_z$Y))
}
我希望(500 + 400)/ 2 = 450用于村庄&#34; a&#34;村庄为700&#34; b&#34;。
答案 0 :(得分:5)
如果你在没有额外功能的情况下编写它,就会更容易理解。在那种情况下,它将是:
df %>%
group_by(village) %>%
summarize(Y_village = mean(Y[Z == z]))
## A tibble: 2 x 2
# village Y_village
# <fct> <dbl>
#1 a 450.
#2 b 700.
因此,你的功能应该是
Y_hat_village <- function(Ycol, Zcol, z){
mean(Ycol[Zcol == z])
}
然后使用它:
df %>%
group_by(village) %>%
summarize(Y_village = Y_hat_village(Y, Z, z))
请注意,我编写的函数仅处理可以直接从summarise
内提供的原子向量。您无需将整个data.frame提供给它。