Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对R中不同数据帧的同一列求和_R_Dataframe - Fatal编程技术网

如何对R中不同数据帧的同一列求和

如何对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

我有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")))
怎么样

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
        ....