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

在R语言中基于共享属名求和合并数据框行的优雅实现方法

按属名分组求和的解决方案

首先,先确保你能正确创建目标数据框(如果你的数据是从外部导入的,比如csv,可以用read.csv("你的文件路径"),这里先给出示例数据的创建代码,方便你测试):

# 创建示例数据框
df <- data.frame(
  Genera = c("g1", "g1", "g2", "g2"),
  Species = c("s1", "s2", "s3", "s4"),
  t1 = c(0, 0, 1, 1),
  t2 = c(0, 1, 2, 0),
  t3 = c(1, 1, 0, 0),
  t4 = c(3, 0, 1, 0),
  t5 = c(1, 1, 0, 0)
)

下面提供两种简单的实现方法,适合R语言新手:

方法一:使用Base R自带的aggregate函数

不需要额外安装包,直接用R内置函数即可完成分组求和:

# 去掉Species列,按Genera分组对剩余列求和
result_base <- aggregate(. ~ Genera, data = df[, -2], sum)
print(result_base)

运行后输出结果:

Genera t1 t2 t3 t4 t5
1     g1  0  1  2  3  2
2     g2  2  2  0  1  0

方法二:使用dplyr包(更直观的语法)

dplyr是数据处理常用的包,语法更贴近自然语言,适合新手理解:

# 先安装包(第一次使用时运行)
# install.packages("dplyr")
# 加载包
library(dplyr)

# 分组求和
result_dplyr <- df %>%
  group_by(Genera) %>%  # 按Genera列分组
  summarise(across(t1:t5, sum), .groups = "drop")  # 对t1到t5列分别求和,最后取消分组状态
print(result_dplyr)

运行后同样会得到你想要的结果。

关于你之前尝试的问题说明

你之前试图删除Species列并将Genera设为行名失败,是因为R要求行名必须唯一,重复的Genera会被自动添加编号。正确的做法是保留Genera作为普通列,通过分组聚合的方式实现求和,这样既保留了属名信息,又能得到各时间列的总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:13:23