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

如何在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")

表格展示

VehicleColorAnaJoe
Carred19
Tramred16
Bikered25
Carblue56
Tramblue54
Bikegreen07

期望输出

数据结构

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") 

表格展示

ColorAnaJoe
red420
blue1010
green07

错误脚本分析

你尝试的脚本存在两个核心问题:

  1. sum(names)是对字符向量c("Ana","Joe")求和,R无法对字符类型执行求和操作,会直接报错;
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:40:01