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

如何对两个列名相同的列表按行求和对应列的值?

解决方案:对两个同结构数据框的同名列按行求和

首先说明:你提到的“列表”应该是数据框(data frame),以下基于数据框结构提供几种可行方法:

问题分析

你原代码的问题在于:bind_cols会生成重复列名(如两个Time、两个Nuc_11),而group_by(!!!NucID)是按所有列分组,完全不符合“对应行同名列求和”的逻辑,因此无法得到正确结果。


方法1:基础R(最简洁)

利用数据框的向量运算特性,直接对对应列相加:

# 保留Time列(两个数据框的Time完全一致,取任意一个即可)
SisSum <- Sis1[, "Time", drop = FALSE]
# 对除Time外的所有列逐行求和
SisSum[, -1] <- Sis1[, -1] + Sis2[, -1]

方法2:dplyr(可读性强)

使用mutate+across实现对应列的逐行相加:

library(dplyr)

SisSum <- Sis1 %>%
  mutate(across(-Time, ~ .x + Sis2[[cur_column()]]))
  • across(-Time):指定对除Time外的所有列操作
  • cur_column():获取当前操作的列名,确保从Sis2中取对应列的值

方法3:data.table(大数据量高效)

适合处理大型数据集,运算效率更高:

library(data.table)

# 转换为data.table格式
setDT(Sis1)
setDT(Sis2)

# 计算求和结果
sum_cols <- setdiff(names(Sis1), "Time")
SisSum <- Sis1[, c(list(Time = Time), 
                   lapply(sum_cols, function(col) .SD[[col]] + Sis2[[col]])), 
               .SDcols = names(Sis1)]

# 恢复原列名(可选,因为lapply返回的列默认命名为V1、V2...)
setnames(SisSum, tail(names(SisSum), -1), sum_cols)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:24:12