在R中使用聚合函数计算加权平均数

3
我想使用r中的aggregate函数对一组数据做加权平均。以下是我的数据样式:
```html

这是我的数据:

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

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

1个回答

1

使用weighted.mean代替mean。然而,可能无法使用aggregate,因为aggregate仅循环遍历“Value”列,并且无法访问每个组的“Weight”。

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

如果我们想使用“基本R”,那么“by”应该可以工作。
by(DF, DF[c('Group_1', 'Group_2')], function(x) weighted.mean(x$Value, x$Weight))

1
太棒了,非常感谢你的帮助!我真的很感激! - Sharif Amlani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接