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

如何用dplyr单管道实现按年份分组的不同权重行加权均值计算

用dplyr单管道实现分年份行加权均值计算

无需拆分合并数据集,可根据权重配置规模选择两种简洁的实现方式:

方法1:通过权重表关联(适合多年份权重配置)

先将不同年份的权重整理为单独的数据框,通过年份字段与原数据关联后,直接计算每行的加权均值:

library(dplyr)

# 示例原数据集
df <- tibble(
  year = c(2020, 2020, 2021, 2021),
  col_1 = c(10, 20, 30, 40),
  col_2 = c(50, 60, 70, 80)
)

# 定义各年份的权重配置
year_weights <- tibble(
  year = c(2020, 2021),
  w_col1 = c(0.3, 0.6),  # 2020年col_1权重0.3,2021年0.6
  w_col2 = c(0.7, 0.4)   # 2020年col_2权重0.7,2021年0.4
)

# 单管道实现
result <- df %>%
  left_join(year_weights, by = "year") %>%
  mutate(weighted_row_mean = col_1 * w_col1 + col_2 * w_col2) %>%
  select(-w_col1, -w_col2)  # 可选:移除临时权重列

print(result)

这种方式的优势是权重配置集中管理,后续新增年份只需修改权重表,无需改动计算逻辑。

方法2:用case_when匹配权重(适合少量年份配置)

如果年份数量不多,直接在mutate中用case_when按年份分配权重,一步完成计算:

result <- df %>%
  mutate(
    weighted_row_mean = case_when(
      year == 2020 ~ col_1 * 0.3 + col_2 * 0.7,
      year == 2021 ~ col_1 * 0.6 + col_2 * 0.4,
      TRUE ~ (col_1 + col_2)/2  # 为未定义年份设置默认加权均值
    )
  )

print(result)

这种方式代码更紧凑,无需额外维护权重表,适合年份较少的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:57:12