在 r 中使用跨组聚合的加权平均值

Weighted mean using aggregate across groups in r

我想使用 r 中的聚合函数对一组进行加权平均。

这是我的数据:

set.seed(1980)
Group_1 <- sample(letters[1:4], 50, TRUE)
Group_2 <- sample(letters[8:13], 50, TRUE)
Weight <- sample(seq(1,50), 50, TRUE)
Value <- sample(seq(1,50), 50, TRUE)

DF <- data.frame(Group_1, Group_2, Weight, Value)

head(DF)

我想使用 Weight 列对每个成对组取 Value 列的加权平均值。

这样,聚合函数将如下所示:

aggregate(Value ~ Group_1 + Group_2, data = df, mean)

如何使用聚合函数计算加权平均值?

而不是 mean,使用 weighted.mean。但是,aggregate 在这里可能不是一个选项,因为 aggregate 仅遍历 'Value' 列并且它无法访问每个组的 'Weight' [=19] =]

library(dplyr)
DF %>%
     group_by(Group_1, Group_2) %>%
     summarise(wt_mean = weighted.mean(Value, Weight), .groups = 'drop')

-输出

# A tibble: 21 x 3
# Groups:   Group_1 [4]
#   Group_1 Group_2 wt_mean
#   <chr>   <chr>     <dbl>
# 1 a       h         24.7 
# 2 a       i         15   
# 3 a       j         21.1 
# 4 a       k         23.6 
# 5 a       m         14.1 
# 6 b       i         40   
# 7 b       j         12.7 
# 8 b       k          6.88
# 9 b       l         30.6 
10 b       m          5   
# … with 11 more rows

如果我们想使用 base R,那么 by 应该可以

by(DF, DF[c('Group_1', 'Group_2')], function(x) weighted.mean(x$Value, x$Weight))