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

如何在R的DataFrame中智能添加按科目分组的小计行

高效添加分组小计行的R实现方法

针对你需要为每个SUBJECT添加"All Grades"小计行的需求,以下是两种更高效的实现方式,无需手动逐个字段编写求和逻辑:

方法一:使用dplyr的group_modify + across批量处理

利用dplyr的across函数批量对数值列求和,结合group_modify遍历每个分组,自动生成小计行并与原数据合并:

library(dplyr)

df2 <- df %>%
  group_by(SUBJECT) %>%
  group_modify(~ bind_rows(
    # 生成当前分组的小计行:Level设为"All Grades",数值列求和
    summarize(., 
              Level = "All Grades",
              across(c(Total, starts_with("Class")), sum)),
    # 拼接原分组的所有行
    .x
  )) %>%
  ungroup()

优势:

  • 无需手动指定每个Class*列,starts_with("Class")会匹配所有以Class开头的列,新增同类列时无需修改代码
  • 逻辑清晰,通过group_modify统一处理每个分组的小计生成与拼接

方法二:使用janitor包快速添加小计行

janitor包的adorn_totals函数专门用于生成总计/小计行,代码更简洁:

# 若未安装janitor包,先执行:install.packages("janitor")
library(janitor)
library(dplyr)

df2 <- df %>%
  group_by(SUBJECT) %>%
  # 为每个分组添加行小计,指定小计行名称为"All Grades",填充非数值列
  adorn_totals("row", name = "All Grades", fill = "All Grades") %>%
  ungroup() %>%
  # 将小计行调整到每个分组的最前面
  arrange(SUBJECT, desc(Level == "All Grades"))

优势:

  • 代码量极少,adorn_totals自动识别数值列并求和
  • 内置填充非数值列的功能,无需额外处理Level字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:05:31