【问题标题】:Weighted mean using aggregate across groups in r [duplicate]在 r [重复] 中使用跨组聚合的加权平均值
【发布时间】:2021-02-01 18:05:15
【问题描述】:

我想使用 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)

如何使用聚合函数获取加权平均值?

【问题讨论】:

    标签: r aggregate data-management


    【解决方案1】:

    使用weighted.mean 代替mean。但是,aggregate 在这里可能不是一个选项,因为aggregate 仅循环遍历“值”列,并且无法访问每个组的“权重”

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

    【讨论】:

    • 太棒了,非常感谢您的帮助!我真的很感激!
    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多