我有一個數據框,我想平均每60列記錄的所有列,並返回一個新的數據框。例如,我想要從第1行到第60行的每一列取平均值,然後取第61行第120行,然後是第121-180行,然後遍歷整個數據幀。然後將所有這些手段彙總在一張表下作爲新的數據框。如何取得R的所有列的每條記錄的平均數
任何人都可以幫助我嗎?非常感謝!
我有一個數據框,我想平均每60列記錄的所有列,並返回一個新的數據框。例如,我想要從第1行到第60行的每一列取平均值,然後取第61行第120行,然後是第121-180行,然後遍歷整個數據幀。然後將所有這些手段彙總在一張表下作爲新的數據框。如何取得R的所有列的每條記錄的平均數
任何人都可以幫助我嗎?非常感謝!
我是做什麼用lapply
令人費解,並colMeans
我才意識到,這將是更容易rollapply
多從package: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
顯然不是在你的數據測試,但在第一個例子幫助(聚合)
dflen <- nrow(dfrm)
aggregate(dfrm, list(rep(1:(dflen/60 +1), each=60, length=dflen)), mean)
你好!請通過看看[**如何使一個偉大的可重複的例子**],使您的文章重現性(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-例如)爲我們提供幫助。謝謝。 – Arun 2013-04-10 18:28:25
通常,這不是一個很好的編程習慣。最好指定定義這些組的變量和值,而不僅僅是第1-60,61-120行...... – 2013-04-11 01:46:54