如何对R中不同数据帧的同一列求和
我有4个数据帧,每个数据帧的行数和列数完全相同。第1、2、5列中的值在每个数据帧中都相同。从这4个数据帧中,我想获得一个单独的数据帧,其中第三列和第四列('pred1'和'pred2')是通过对4个数据帧中的值求和而创建的。有可能吗?以下是我的数据帧:如何对R中不同数据帧的同一列求和,r,dataframe,R,Dataframe,我有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,co
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")))
怎么样
df5 <- df1
df5$pred1 <- df1$pred1 + df2$pred1 + df3$pred1 + df4$pred1
df5$pred2 <- df1$pred2 + df2$pred2 + df3$pred2 + df4$pred2
akrun还提供了一个我不遵循的建议,但它似乎也可以很好地处理任意多个数据帧(只需将1:4扩展到1:n,其中n是最后一个df的数量)
怎么样
df5 <- df1
df5$pred1 <- df1$pred1 + df2$pred1 + df3$pred1 + df4$pred1
df5$pred2 <- df1$pred2 + df2$pred2 + df3$pred2 + df4$pred2
akrun还提供了一个我不遵循的建议,但它似乎也可以很好地处理任意多个数据帧(只需将1:4扩展到1:n,其中n是最后一个df的数量)
如果合并时df1、d2、df3和DF4的值相同 您将得到df5,它将显示df1值和df1的大小 那你为什么不
df5 <- df1
df5$Pred1 <- rowSums(df1)
df5$pred2 <- rowSums(df5[,1:4])
df5如果合并时df1、d2、df3和df4的值相同
您将得到df5,它将显示df1值和df1的大小
那你为什么不
df5 <- df1
df5$Pred1 <- rowSums(df1)
df5$pred2 <- rowSums(df5[,1:4])
df5将其放入列表中,即Reduce(“+”),lapply(mget(paste0('df',1:4)),“[[”,c(“pred1”,“pred2”))
这看起来非常聪明,但也超出了我的分析能力。也许你应该再做一个回答?这是一个快速而好的回答,但它不会扩大到更多列或更多数据帧。Akrun的评论向你展示了如何扩大这两个列。这是一个中间媒介,它可以节省一点输入,并让你可以轻松地扩大列ly:cols=c(“pred1”,“pred2”)
,然后df5[,cols]=df1[,cols]+df2[,cols]+df3[,cols]+df4[,cols]
谢谢,我添加了这两个建议。你的建议对我来说更清晰,而且在添加许多专栏时显然会更好。akrun的建议仍然超出我的理解范围,但我之所以将其包括在内,是因为我看到了能够同时处理大量dfs的优势。akrun答案的注释版本:paste0('df',1:4)
将现有数据帧的名称创建为字符串,然后mget
获取具有这些名称的对象并将它们放入列表中。在更好的情况下,OP的数据将已经在列表中,因此mget(粘贴(…)
将替换为my_list
。lappy
从列表中的每个df中提取指定的列,然后Reduce(“+”,…)
将它们相加。将其放在列表中,即Reduce(“+”,lappy(mget(paste0('df),1:4)),“[[”,c(“pred1”,“pred2”))
这看起来非常聪明,但也超出了我的分析能力。也许你应该再做一个回答?这是一个快速而好的回答,但它不会扩大到更多列或更多数据帧。Akrun的评论向你展示了如何扩大这两个列。这是一个中间媒介,它可以节省一点输入,并让你可以轻松地扩大列ly:cols=c(“pred1”,“pred2”)
,然后df5[,cols]=df1[,cols]+df2[,cols]+df3[,cols]+df4[,cols]
谢谢,我添加了这两个建议。你的建议对我来说更清晰,而且在添加许多专栏时显然会更好。akrun的建议仍然超出我的理解范围,但我之所以将其包括在内,是因为我看到了能够同时处理大量dfs的优势。akrun答案的注释版本:paste0('df',1:4)
将现有数据帧的名称创建为字符串,然后mget
获取具有这些名称的对象并将它们放入列表中。在更好的情况下,OP的数据将已经在列表中,因此mget(粘贴(…)
将替换为my_list
。lappy
从列表中的每个df中提取指定的列,然后Reduce(“+”,…)
将它们相加。R所以不是pandas
?你是说将4个数据帧中的值相加是什么意思?你是在添加c1、c2、c5吗?删除pandas。因为与pandasR不相关所以不是pandas
?你是说将4个数据帧中的值相加是什么意思?你是在添加c1、c2、c5吗?删除pandas。因为与pandas不相关
df1 <- data.frame(c1= c(1,1,2,2,4),c2 = c(2,2,3,3,5),c5 = c(3,4,4,5,6))
df2 <- data.frame(c1= c(10,1,2,2,4),c2 = c(2,2,30,3,5),c5 = c(3,4,40,5,6))
df3 <- data.frame(c1= c(15,1,2,2,4),c2 = c(22,2,3,3,5),c5 = c(3,44,4,5,6))
df4 <- data.frame(c1= c(12,1,2,2,4),c2 = c(2,23,3,3,5),c5 = c(3,4,45,5,6))
tmp <- merge(df1,df2,by= c("c1","c2","c5"),all.x = TRUE,all.y=TRUE)
tmp <- merge(tmp,df3,by= c("c1","c2","c5"),all.x = TRUE,all.y=TRUE)
tmp <- merge(tmp,df4,by= c("c1","c2","c5"),all.x = TRUE,all.y=TRUE)
tmp$pred1 = rowSums(tmp[,1:3])
tmp:
tmp
c1 c2 c5 pred1
1 1 2 3 6
2 1 2 4 7
3 1 2 44 47
4 1 23 4 28
5 2 3 4 9
....