【发布时间】:2011-11-30 21:07:37
【问题描述】:
假设我有一个 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等)?我在plyr 中尝试过lapply 和ldply,但它们返回列表中每个data.frame 的统计信息。
编辑:出于某种原因,这被重新标记为家庭作业。不管怎样,这并不重要,但这不是一个家庭作业问题。我只是不知道为什么我不能让它工作。感谢您的任何见解!
Edit2:进一步澄清: 我可以使用循环获得结果,但我希望有一种方法(一种更简单、更快的方法,因为我使用的数据有 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
我想知道是否有一种不那么笨重和更快的方法来做到这一点。谢谢!
【问题讨论】:
-
那些不是手段。这些是中位数。
-
感谢您指出这一点。