如何获得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
答案 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
并将apply
与rowMeans
和na.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')