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

R中按Model、Year分组为dataframe添加A-B-D计算值汇总行

R分组插入计算汇总行实现方案

你原有group_modify+add_row的写法逻辑成立,只需要在新增行的步骤里同步完成分组内的数值计算即可,不需要额外拆分操作步骤。


完整可运行代码

library(dplyr)

# 构造示例数据集
df <- data.frame(Model = c(1,1,1,2,2,2,2,2,2,2,2,2,2),
                 Year = c(2020, 2020, 2020, 2020, 2020, 2020, 2020, 2030, 2030, 2030, 2040, 2040, 2040),
                 Variable = c("A", "B", "C", "A", "B", "C", "D", "A", "C", "E", "A", "C", "D"),
                 value = c(15, 2, 5, 25, 6, 4, 4, 41, 24,1, 15, 3, 2))

# 分组新增计算汇总行
df <- df %>% 
  group_by(Model, Year) %>% 
  group_modify(~ {
    # 按规则计算汇总值:A对应value 减 B、D对应value,无对应Variable时默认取0计算
    new_value <- sum(.x$value[.x$Variable == "A"]) -
                 sum(.x$value[.x$Variable == "B"]) -
                 sum(.x$value[.x$Variable == "D"])
    # 插入汇总行,.before=0表示汇总行放在分组最开头,要放末尾改成.after = Inf即可
    add_row(.x, Variable = "New", value = new_value, .before = 0)
  }) %>% 
  ungroup()

逻辑说明

  • 用sum()匹配对应Variable的取值,是为了兼容分组内缺失B/D/A类别的场景:比如示例中Model=2、Year=2030的分组没有B和D类别,计算时会自动按0处理,不会返回NA值。
  • 计算结果和预期完全匹配:
    • Model=1、Year=2020分组:15-2-0 = 13
    • Model=2、Year=2020分组:25-6-4 = 15
    • Model=2、Year=2030分组:41-0-0 = 41
    • Model=2、Year=2040分组:15-0-2 = 13

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:27:31