获取不同数据帧中匹配列的方法

时间:2015-10-09 02:39:56

标签: r

如何获得3种不同数据帧的方法?我试过了:

df1<-data.frame(c(1,2,3),c(1,7,3),c(rep(1,3)))
colnames(df1)<-c("c1","c2","c3")
df2<-data.frame(c(5,5,5),c(1,3,4),c(rep(1,3)))
colnames(df2)<-c("c1","c2","c3")
df3<-data.frame(c(2,5,2),c(1,1,1),c(rep(1,3)))
colnames(df3)<-c("c1","c2","c3")
#m3<-m3[!(is.na(m3[,3])|is.na(m3[,4])),]
#m3[!duplicated(m3$c1),]

cbind(apply(data.frame(df1,df2,df3), 1, mean))

给了我行中所有东西的手段。我的目标是获得匹配行的均值,例如每列的(df1 [,1]和df2 [,1]和df [,3])的平均值。

我所希望的是:

      c1.mean    c2.mean   c3.mean
row1    2.67         1       1
row2      4         3.67     1
row3    3.33        2.67    1

2 个答案:

答案 0 :(得分:2)

setNames(round((df1+df2+df3)/3,digit=2),paste0('c',1:3,'.mean'))

答案 1 :(得分:0)

如果有更多数据集,我们可以将它们放在list+ Reduce并除以n个数据集。

setNames(round(Reduce('+', mget(ls(pattern='df\\d+')))/3,2),
                          paste0(names(df1), '.mean'))
#  c1.mean c2.mean c3.mean
#1    2.67    1.00       1
#2    4.00    3.67       1
#3    3.33    2.67       1

如果数据集中有NA,则上述方法可能不是最佳方法。如果有NA值,我们可以将list转换为array并将applyrowMeansna.rm=TRUE

一起使用
res <- round(apply(array(unlist(mget(ls(pattern='df\\d+'))), 
               dim=c(dim(df1), 3)), 2, rowMeans, na.rm=TRUE),2)
res 
#     [,1] [,2] [,3]
#[1,] 2.67 1.00    1
#[2,] 4.00 3.67    1
#[3,] 3.33 2.67    1

colnames(res) <- paste0(names(df1), '.mean')