如何在data.table中汇总指定交易对手的quantity并保留其他数据?
解决方案(data.table 原生实现)
针对你的需求,用data.table原生语法处理最适配,避免转换数据结构的问题,具体步骤如下:
步骤1:构建分组标识
给需要合并的两个counterparty设置统一标识,其余保留原名称:dt.data[, grp := ifelse(counterparty %in% c("RWE (DE)", "RWE (GB)"), "RWE (Combined)", counterparty)]步骤2:分组求和
按marketArea、delivMonth和分组标识聚合quantity:result_dt <- dt.data[, .(quantity = sum(quantity)), by = .(marketArea, delivMonth, grp)]步骤3:还原字段名(可选)
将临时分组列改回原字段名counterparty:setnames(result_dt, "grp", "counterparty")
简化版一行代码
如果想省略临时列,直接在分组时指定合并规则:
result_dt <- dt.data[, .(quantity = sum(quantity)), by = .( marketArea, delivMonth, counterparty = ifelse(counterparty %in% c("RWE (DE)", "RWE (GB)"), "RWE (Combined)", counterparty) ) ]
注意事项
- 合并后的
counterparty名称可根据需求修改(比如改成"RWE") - 原生data.table语法比dplyr组合更高效,尤其适合大数据集
- 非目标
counterparty的条目会自动保留原有分组逻辑,不会被修改
内容的提问来源于stack exchange,提问作者Miko
相关产品推荐
相关产品推荐

