如何用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
相关产品推荐
相关产品推荐

