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

R语言如何为数据框指定列添加按年份统计的行总计行

R按年份分组为指定列追加合计行方案

你之前的代码存在3个核心问题,导致无法得到预期结果:

  • 用summarise()会将原数据折叠为仅含分组列和汇总值的结果,不会保留原始明细行,无法实现“新增一行”的需求
  • 代码中'trip N2'被单引号包裹,属于普通字符串,不是对数据列的引用,求和对象完全错误
  • 未指定需要计算合计的目标列nb de sejours、activite en valeur,分组维度也未匹配你需要的“年份”字段

推荐实现方案

方案1:dplyr + janitor 简洁写法(适合新手)

代码逻辑简单,不需要手动写逐列求和逻辑,注意将代码中annee替换为你数据中实际存储年份的列名即可:

# 首次使用先安装依赖包
install.packages(c("dplyr", "janitor"))
library(dplyr)
library(janitor)

computing_with_total <- computing %>%
  # 按年份分组,替换`annee`为你的实际年份列名
  group_by(`annee`) %>%
  # 仅对两个目标列追加合计行,合计行命名为total
  adorn_totals(
    where = "row",
    name = "total",
    na.rm = TRUE,
    ... = c(`nb de sejours`, `activite en valeur`)
  ) %>%
  ungroup()

方案2:纯dplyr写法(无额外依赖)

如果不想安装janitor包,可以用分组遍历的方式追加合计行,注意替换对应列名:

library(dplyr)

computing_with_total <- computing %>%
  # 替换`annee`为实际年份列名
  group_by(`annee`) %>%
  group_modify(~ .x %>%
    add_row(
      # 替换`trip`为你数据中需要标注"total"的维度列,没有的话可以删掉这行
      `trip` = "total",
      `nb de sejours` = sum(.x$`nb de sejours`, na.rm = TRUE),
      `activite en valeur` = sum(.x$`activite en valeur`, na.rm = TRUE)
    )
  ) %>%
  ungroup()

注意事项

  • R中引用带空格、特殊字符的列名,必须使用反引号`包裹,不能用单/双引号,否则会被识别为普通字符串
  • 求和时加入na.rm = TRUE参数,避免列中存在空值导致求和结果返回NA
  • 如果不需要按年份拆分,只需要给全表加一行总合计,删除代码中group_by()相关行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:54:24