2013-04-10 46 views
-1

我有一个数据框,我想平均每60列记录的所有列,并返回一个新的数据框。例如,我想要从第1行到第60行的每一列取平均值,然后取第61行第120行,然后是第121-180行,然后遍历整个数据帧。然后将所有这些手段汇总在一张表下作为新的数据框。如何取得R的所有列的每条记录的平均数

任何人都可以帮助我吗?非常感谢!

+1

你好!请通过看看[**如何使一个伟大的可重复的例子**],使您的文章重现性(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-例如)为我们提供帮助。谢谢。 – Arun 2013-04-10 18:28:25

+0

通常,这不是一个很好的编程习惯。最好指定定义这些组的变量和值,而不仅仅是第1-60,61-120行...... – 2013-04-11 01:46:54

回答

2

我是做什么用lapply令人费解,并colMeans我才意识到,这将是更容易rollapplypackage:zoo。为了完整起见,我展示了这两种方法如何一代产量上一些虚拟的数据相同的结果,这是宽5列由120列长:

data <- data.frame(matrix(runif(600),nrow=120)) 
    nrows <- 60 
    t(sapply(rev(1:floor(nrow(data)/nrows)) , function(x){ colMeans(data[c(rev(seq.int(nrow(data)/x))[1:60]),]) })) 
       X1  X2  X3  X4  X5 
# [1,] 0.4706680 0.4780024 0.4749281 0.4910620 0.4815172 
# [2,] 0.5236926 0.4385900 0.4979433 0.4787086 0.5616210 

或者更简单地rollapply()

require(zoo) 
    rollapply(data, 60, FUN = mean , by = 60) 
       X1  X2  X3  X4  X5 
# [1,] 0.4706680 0.4780024 0.4749281 0.4910620 0.4815172 
# [2,] 0.5236926 0.4385900 0.4979433 0.4787086 0.5616210 
0

显然不是在你的数据测试,但在第一个例子帮助(聚合)

dflen <- nrow(dfrm) 
aggregate(dfrm, list(rep(1:(dflen/60 +1), each=60, length=dflen)), mean)