基于分组配对与同日期双条件为数据集df创建x.total求和列
实现步骤
先按求和规则给原数据的分组做配对映射:A和B归为同一配对组,C和D归为另一配对组;再按「配对组+同一日期」的维度计算组内x的总和,把结果匹配回原表每一行,就能得到符合要求的x.total列。
dplyr 方案(日常分析最常用)
library(dplyr) df %>% # 标记每一行所属的配对组 mutate(pair_group = case_when( group %in% c("A", "B") ~ "AB", group %in% c("C", "D") ~ "CD" )) %>% # 按配对组、日期分组,计算组内x的总和 group_by(pair_group, date) %>% mutate(x.total = sum(x)) %>% ungroup() %>% # 删除中间生成的辅助分组列 select(-pair_group)
data.table 方案(适配大数量级场景,运行速度更快)
library(data.table) setDT(df) df[, pair_group := fifelse(group %in% c("A", "B"), "AB", "CD") ][, x.total := sum(x), by = .(pair_group, date) ][, pair_group := NULL]
纯base R 方案(无额外安装包依赖)
# 标记配对组 df$pair_group <- ifelse(df$group %in% c("A", "B"), "AB", "CD") # 计算各配对组对应日期的x求和值 sum_result <- aggregate(x ~ pair_group + date, df, sum) colnames(sum_result)[3] <- "x.total" # 将求和结果匹配回原表 df <- merge(df, sum_result, by = c("pair_group", "date"), all.x = TRUE) # 删除辅助列 df$pair_group <- NULL
运行代码后得到的结果和预期完全匹配,对应校验值如下:
- 197302日期下,AB组x求和:
0.53 + 0.68 = 1.21,CD组x求和:0.16 + 0.31 = 0.47 - 197303日期下,AB组x求和:
0.60 + 0.71 = 1.31,CD组x求和:0.25 + 0.39 = 0.64 - 197304日期下,AB组x求和:
0.57 + 0.65 = 1.22,CD组x求和:0.22 + 0.36 = 0.58
后续如果调整配对规则,只需要修改pair_group的映射逻辑即可,无需改动后续求和流程。
内容的提问来源于stack exchange,提问作者Anna Madsen
相关产品推荐
相关产品推荐

