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

R语言中聚合数据框嵌套列并保留原列名的实现方法

解决分组求和并保留原列名的问题

针对你遇到的用aggregate分组求和后列名丢失的问题,这里有两种简单的解决方法,都能让结果完美保留原数据框的列名:

方法1:调整aggregate的输出列名

你可以在调用aggregate时给分组列指定名称,再手动替换结果中求和列的名称,完全匹配原列名:

# 执行分组求和,同时给分组列命名为hex
agg_result <- aggregate(df$material_diff, by = list(hex = df$hex), FUN = sum)
# 将求和列的名称替换为原数据框中对应的列名
colnames(agg_result)[-1] <- colnames(df)[-1]

运行后agg_result的结构就和你期望的完全一致:

hex material_diff.1 material_diff.2 material_diff.3
1  90              12               9              20
2 250               0               0               0
3 400               0               0              10

方法2:用dplyr实现更简洁的操作

如果你习惯使用tidyverse生态的工具,dplyr的代码会更直观,无需手动调整列名,直接返回带原列名的结果:

library(dplyr)

df %>%
  group_by(hex) %>%
  summarise(across(starts_with("material_diff"), sum), .groups = "drop")

这里across(starts_with("material_diff"))会自动选中所有以material_diff开头的列,对它们分别求和,分组后自动保留原列名。

为什么原代码会丢失列名?

你最初的aggregate(df$material_diff, by=list(df$hex),FUN=sum)中,by参数的列表没有命名,所以分组列默认叫Group.1;而material_diff是矩阵类型的列,求和后生成的列会被默认命名为V1、V2、V3,通过上面的方法就能轻松修正这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:47:46