You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言dplyr中用权重数据框对各列求均值及加权均值的方法

问题解答

1. 计算df每列对应权重列的加权均值

R base包内置了weighted.mean()函数可以直接计算加权均值,因为两个dataframe结构完全一致,可以逐列对应计算,base R实现代码如下:

# base R 实现
weighted_means <- mapply(weighted.mean, x = df, w = df_weights, na.rm = TRUE)

计算结果验证:

  • Monday列加权均值:(110 + 110 + 10*1)/(10+10+1) = 30/21 ≈ 1.4286
  • Tuesday列加权均值:(11 + 21 +3*1)/(1+1+1) = 6/3 = 2

2. 整合普通均值与加权均值到同一DataFrame

可以通过summarize_all传入包含两个计算函数的列表实现需求,也可以使用dplyr 1.0.0之后更推荐的across()语法实现,示例代码如下:

library(dplyr)

# 方法1:使用summarize_all实现
result <- df %>%
  summarize_all(
    list(
      普通均值 = function(x) mean(x, na.rm = TRUE),
      加权均值 = function(x) weighted.mean(x, w = df_weights[[cur_column()]], na.rm = TRUE)
    )
  )

# 方法2:更推荐的across语法实现
result <- df %>%
  summarize(
    across(
      .cols = everything(),
      .fns = list(
        普通均值 = ~mean(.x, na.rm = TRUE),
        加权均值 = ~weighted.mean(.x, w = df_weights[[cur_column()]], na.rm = TRUE)
      )
    )
  )

输出的result默认是宽表结构,每列对应原始df的列+统计类型命名,值为对应统计结果。如果需要调整为每行是统计类型、每列对应原始df列的结构,可以对结果做转置处理:

# 转置结果示例
result_t <- t(result) %>% 
  as.data.frame() %>% 
  setNames("统计值")

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:21:00