gpt4 book ai didi

r - dplyr:在group_by()之后在summary()中使用自定义函数

转载 作者:行者123 更新时间:2023-12-04 10:51:50 25 4
gpt4 key购买 nike

我们如何在group_by()之后使用自定义函数?
我检查了类似的帖子(123),但是我当前的代码为所有组返回相同的值。

> 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))
}

我想让(a)村庄有(500 + 400)/2 = 450,而让“b”村庄有700。

最佳答案

如果您从不带任何附加功能的情况下开始编写,则更容易理解。在这种情况下,它将是:

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。

关于r - dplyr:在group_by()之后在summary()中使用自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50925734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com