假设我有一个 data.frames 列表(行和列相等)
dat1 <- as.data.frame(matrix(rnorm(25), ncol=5))
dat2 <- as.data.frame(matrix(rnorm(25), ncol=5))
dat3 <- as.data.frame(matrix(rnorm(25), ncol=5))
all.dat <- list(dat1=dat1, dat2=dat2, dat3=dat3)
如何返回单个 data.frame,它是列表中 data.frames 中每个元素的平均值(或总和等)(例如,列表 1、2、3 中第一行和第一列的平均值等在)?我在
lapply
中尝试过 ldply
和 plyr
但这些返回列表中每个 data.frame 的统计数据。编辑:出于某种原因,这被重新标记为家庭作业。并不是说这两种方式都很重要,但这不是作业问题。我只是不知道为什么我不能让它工作。感谢您的任何见解!
编辑2:进一步说明:
我可以使用循环获得结果,但我希望有一种方法(一种更简单、更快的方法,因为我使用的数据具有 12 行 x 100 列的 data.frames,并且有 1000 多个这些的列表数据帧)。
z <- matrix(0, nrow(all.dat$dat1), ncol(all.dat$dat1))
for(l in 1:nrow(all.dat$dat1)){
for(m in 1:ncol(all.dat$dat1)){
z[l, m] <- mean(unlist(lapply(all.dat, `[`, i =l, j = m)))
}
}
结果是:
> z
[,1] [,2] [,3] [,4] [,5]
[1,] -0.64185488 0.06220447 -0.02153806 0.83567173 0.3978507
[2,] -0.27953054 -0.19567085 0.45718399 -0.02823715 0.4932950
[3,] 0.40506666 0.95157856 1.00017954 0.57434125 -0.5969884
[4,] 0.71972821 -0.29190645 0.16257478 -0.08897047 0.9703909
[5,] -0.05570302 0.62045662 0.93427522 -0.55295824 0.7064439
我想知道是否有一种不那么笨拙和更快的方法来做到这一点。谢谢!
最佳答案
这是一个带有 plyr
的单内衬.您可以更换 mean
与您想要的任何其他功能。
ans1 = aaply(laply(all.dat, as.matrix), c(2, 3), mean)
关于r - data.frames 列表中元素的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7651539/