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

在R语言中如何用dplyr/tidyr快速为指定组求和并新增汇总行?

用dplyr实现简洁的汇总行添加

直接用dplyr的管道语法结合bind_rows+summarise(across(...))就能一步完成需求,不需要拆分多步骤操作。

示例数据

先构造一个符合需求的示例数据框:

library(dplyr)

df <- tibble(
  Name = c("Justin - A", "Justin - B", "Sarah - A", "Mike - X"),
  Value1 = c(10, 20, 15, 5),
  Value2 = c(3, 7, 4, 2)
)

核心实现代码

df %>%
  bind_rows(
    filter(., grepl("^Justin -", Name)) %>%
      summarise(
        Name = "Justin - All",
        across(where(is.numeric), sum)
      )
  )

代码说明

  • filter(., grepl("^Justin -", Name)):从原始数据中筛选出名称以Justin -开头的行,管道里的.代表上游传入的原始数据框
  • summarise(...):生成汇总行:
    • 手动指定Name为目标名称Justin - All
    • across(where(is.numeric), sum):自动识别所有数值型列并求和,不用硬编码列名,能适配不同数量的数值列
  • bind_rows():将原始数据和生成的汇总行合并,保留全部原始数据的同时新增汇总行

最终输出结果

# A tibble: 5 × 3
  Name        Value1 Value2
  <chr>        <dbl>  <dbl>
1 Justin - A      10      3
2 Justin - B      20      7
3 Sarah - A       15      4
4 Mike - X         5      2
5 Justin - All    30     10

扩展处理:包含其他非数值列的情况

如果数据框还有其他非数值列(比如分类列),可以在summarise里手动指定这些列的取值(比如填Total或空值NA):

df <- tibble(
  Name = c("Justin - A", "Justin - B", "Sarah - A", "Mike - X"),
  Category = c("Group1", "Group1", "Group2", "Group3"),
  Value1 = c(10, 20, 15, 5),
  Value2 = c(3, 7, 4, 2)
)

df %>%
  bind_rows(
    filter(., grepl("^Justin -", Name)) %>%
      summarise(
        Name = "Justin - All",
        Category = "Total", # 也可以写 NA_character_ 表示空值
        across(where(is.numeric), sum)
      )
  )

内容的提问来源于stack exchange,提问作者J.Sabree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26