2013-04-10 51 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)