首页 > 解决方案 > 如何在R中对不同数据帧的同一列求和

问题描述

我有 4 个数据框,每个数据框的行数和列数完全相同。列 1、2、5 中的值在每个数据框中都是相同的。从这 4 个数据帧中,我想获得一个数据帧,其中第三和第四列(“pred1”和“pred2”)是通过对 4 个数据帧中的值求和来创建的。有可能这样做吗?这是我的数据框:

df1  = read.csv(fname1,header=FALSE,col.names=c("c1", "c2", "pred1", "pred2","c5")))
df2  = read.csv(fname2,header=FALSE,col.names=c("c1", "c2", "pred1", "pred2","c5")))
df3  = read.csv(fname3,header=FALSE,col.names=c("c1", "c2", "pred1", "pred2","c5")))
df4  = read.csv(fname4,header=FALSE,col.names=c("c1", "c2", "pred1", "pred2","c5")))

标签: rdataframe

解决方案


怎么样

df5 <- df1
df5$pred1 <- df1$pred1 + df2$pred1 + df3$pred1 + df4$pred1
df5$pred2 <- df1$pred2 + df2$pred2 + df3$pred2 + df4$pred2

根据 Gregor 的建议,您还可以创建一个向量来存储要添加的列(如果有很多),然后像

cols = c("pred1", "pred2")
df5[, cols] = df1[, cols] + df2[, cols] + df3[, cols] + df4[, cols]

akrun 还提供了一个我不遵循的建议,但似乎它也适用于任意数量的数据帧(只需将 1:4 扩展到 1:n,其中 n 是最后一个 df 的数量)。

Reduce("+", lapply(mget(paste0('df', 1:4)), "[[", c("pred1", "pred2")))

推荐阅读