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

如何对含重复行的data.frame数据进行分组汇总?

解决R数据框重复行的数值汇总问题

嘿,这问题我熟!针对你手里的people数据框,我们可以用两种常用的R方法来完成你要的汇总需求——不管你习惯基础R语法,还是喜欢tidyverse的风格,都能轻松搞定~

先确认下你的原始数据:

# 构造示例数据
people <- data.frame(
  role = c("A", "A", "A", "B", "A", "A"),
  name = c("Chet Baker", "Chet Baker", "Miles Davis", "Miles Davis", "Miles Davis", "Bill Evans"),
  n = c(1, 2, 2, 5, 1, 1)
)

head(people)
#   role        name n
# 1    A  Chet Baker 1
# 2    A  Chet Baker 2
# 3    A Miles Davis 2
# 4    B Miles Davis 5
# 5    A Miles Davis 1
# 6    A  Bill Evans 1

1. 按name汇总得到sum_people

方法一:基础R的aggregate()函数

基础R自带的aggregate()函数可以直接按指定列分组求和,写法很直观:

sum_people <- aggregate(n ~ name, data = people, FUN = sum)
sum_people
#          name n
# 1  Chet Baker 3
# 2 Miles Davis 8
# 3  Bill Evans 1

方法二:tidyverse风格(dplyr包)

如果你习惯用管道符%>%的流畅写法,可以用dplyr包来实现:

# 先加载dplyr包(如果没安装先运行 install.packages("dplyr"))
library(dplyr)

sum_people <- people %>%
  group_by(name) %>%          # 按name分组
  summarise(n = sum(n),       # 对每组的n求和
            .groups = "drop") # 取消分组状态,得到普通数据框

sum_people
# # A tibble: 3 × 2
#   name         n
#   <chr>    <dbl>
# 1 Bill Evans    1
# 2 Chet Baker    3
# 3 Miles Davis   8

2. 按role和name汇总得到sum_people_role

这个需求只需要在分组时同时指定role和name即可,两种方法的逻辑和上面一致:

方法一:基础R的aggregate()函数

sum_people_role <- aggregate(n ~ role + name, data = people, FUN = sum)
sum_people_role
#   role        name n
# 1    A  Chet Baker 3
# 2    A Miles Davis 3
# 3    B Miles Davis 5
# 4    A  Bill Evans 1

方法二:tidyverse风格(dplyr包)

sum_people_role <- people %>%
  group_by(role, name) %>%    # 同时按role和name分组
  summarise(n = sum(n),
            .groups = "drop")

sum_people_role
# # A tibble: 4 × 3
#   role  name         n
#   <chr> <chr>    <dbl>
# 1 A     Bill Evans    1
# 2 A     Chet Baker    3
# 3 A     Miles Davis   3
# 4 B     Miles Davis   5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:13:55