如何在RStudio中按Color分组对指定列数据求和?
按Color分组计算指定列的求和值(R语言)
问题描述
现有一个超过500行的DataFrame,需要按Color列分组,分别计算Ana和Joe列的求和值,排除Vehicle列。
输入数据
数据结构
structure(list( Vehicle = structure(c(1L, 2L, 3L, 1L, 2L, 3L), .Label = c("Car","Tram", "Bike"), class = "factor"), Color = structure(c(1L, 1L, 1L, 2L, 2L, 3L), .Label = c("red","blue", "green"), class = "factor"), Ana = c(1, 1, 2, 5,5, 0), Joe = c(9,6, 5, 6,4, 7)), row.names = c(NA, 6L), class = "data.frame")
表格展示
| Vehicle | Color | Ana | Joe |
|---|---|---|---|
| Car | red | 1 | 9 |
| Tram | red | 1 | 6 |
| Bike | red | 2 | 5 |
| Car | blue | 5 | 6 |
| Tram | blue | 5 | 4 |
| Bike | green | 0 | 7 |
期望输出
数据结构
structure(list( Color = structure(c(1L, 2L, 3L), .Label = c("red","blue", "green"), class = "factor"), Ana = c(4, 10, 0), Joe = c(20,10, 7)), row.names = c(NA, 3L), class = "data.frame")
表格展示
| Color | Ana | Joe |
|---|---|---|
| red | 4 | 20 |
| blue | 10 | 10 |
| green | 0 | 7 |
错误脚本分析
你尝试的脚本存在两个核心问题:
sum(names)是对字符向量c("Ana","Joe")求和,R无法对字符类型执行求和操作,会直接报错;sum_name=(sum(names))只会生成一列结果,无法分别得到Ana和Joe的分组求和值。
错误脚本:
names <- c("Ana", "Joe") Heatmap %>% group_by(Color) %>% summarise(sum_name=(sum(names)))
正确解决方案
方法1:使用dplyr的across函数(推荐)
利用dplyr的across()函数批量对指定列执行分组求和,支持直接列名或字符向量指定目标列:
直接指定列名
library(dplyr) result <- Heatmap %>% group_by(Color) %>% summarise(across(c(Ana, Joe), sum))
通过字符向量指定列名
names <- c("Ana", "Joe") result <- Heatmap %>% group_by(Color) %>% summarise(across(all_of(names), sum))
方法2:使用base R的aggregate函数
如果不使用tidyverse工具,可使用base R的aggregate()函数实现需求:
names <- c("Ana", "Joe") result <- aggregate(Heatmap[names], by = list(Color = Heatmap$Color), sum)
两种方法都能输出你期望的分组求和结果。
内容的提问来源于stack exchange,提问作者Annelisa
相关产品推荐
相关产品推荐

