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
相关产品推荐
相关产品推荐

