gpt4 book ai didi

r - 计算组平均值,同时使用dplyr排除当前观察值

转载 作者:行者123 更新时间:2023-12-04 09:40:19 24 4
gpt4 key购买 nike

使用dplyr(最好),我试图计算每个观察值的组均值,同时将该观察值从组中排除。

看来这应该与rowwise()group_by()结合使用是可行的,但是两个函数不能同时使用。

给定此数据框:

df <- data_frame(grouping = rep(LETTERS[1:5], 3),
value = 1:15) %>%
arrange(grouping)
df
#> Source: local data frame [15 x 2]
#>
#> grouping value
#> (chr) (int)
#> 1 A 1
#> 2 A 6
#> 3 A 11
#> 4 B 2
#> 5 B 7
#> 6 B 12
#> 7 C 3
#> 8 C 8
#> 9 C 13
#> 10 D 4
#> 11 D 9
#> 12 D 14
#> 13 E 5
#> 14 E 10
#> 15 E 15

我想获得每个观察值的组均值,而该观察值不包含在组中,结果是:
#>    grouping value special_mean
#> (chr) (int)
#> 1 A 1 8.5 # i.e. (6 + 11) / 2
#> 2 A 6 6 # i.e. (1 + 11) / 2
#> 3 A 11 3.5 # i.e. (1 + 6) / 2
#> 4 B 2 9.5
#> 5 B 7 7
#> 6 B 12 4.5
#> 7 C 3 ...

我曾尝试将 rowwise()嵌套在 do()调用的函数中,但并未按照以下方式使其起作用:
special_avg <- function(chunk) {
chunk %>%
rowwise() #%>%
# filter or something...?
}

df %>%
group_by(grouping) %>%
do(special_avg(.))

最佳答案

无需定义自定义函数,相反,我们可以简单地将组中的所有元素相加,减去当前值,然后除以每组中的元素数减去1

df %>% group_by(grouping) %>%
mutate(special_mean = (sum(value) - value)/(n()-1))
# grouping value special_mean
# (chr) (int) (dbl)
#1 A 1 8.5
#2 A 6 6.0
#3 A 11 3.5
#4 B 2 9.5
#5 B 7 7.0

关于r - 计算组平均值,同时使用dplyr排除当前观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858876/

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