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

R语言data.frame按分组计算年份累计值并新增Total汇总行实现方法

实现方案

这里提供3种常用实现方式,可根据你的使用习惯选择:

方案1:纯dplyr实现(tidyverse生态常用)

先加载dplyr包,分组后对每个子数据框追加汇总行即可:

library(dplyr)

result <- data %>%
  # 按type分组
  group_by(type) %>%
  # 对每个分组的子数据框执行操作
  group_modify(~ rbind(
    .x, 
    data.frame(year = "Total", x = sum(.x$x))
  )) %>%
  # 取消分组
  ungroup()

方案2:janitor包极简实现

janitor包的adorn_totals函数专门用于快速添加汇总行,代码更简洁:

library(dplyr)
library(janitor)

result <- data %>%
  group_by(type) %>%
  group_modify(~ adorn_totals(.x, where = "row", fill = "Total")) %>%
  ungroup()

方案3:Base R实现(无需安装额外包)

如果不想加载第三方包,可用基础函数拆分、处理、合并数据:

# 按type拆分原数据
data_split <- split(data, data$type)

# 遍历每个分组添加汇总行
data_with_total <- lapply(data_split, function(df) {
  total_row <- data.frame(
    year = "Total",
    type = unique(df$type),
    x = sum(df$x)
  )
  rbind(df, total_row)
})

# 合并所有分组并重置行号
result <- do.call(rbind, data_with_total)
rownames(result) <- NULL

注意:原year列为整数类型,加入字符型的"Total"后,整列会自动转换为字符型,属于正常现象,符合你给出的预期输出格式要求。

内容的提问来源于stack exchange,提问作者A.Benson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03