-1

我有一个数据框,我想对所有列的每 60 条记录取平均值,然后返回一个新的数据框。

例如,我想取从第 1 行到第 60 行的每一列的平均值,然后是第 61 行到第 120 行,然后是 121-180,同样……并遍历整个数据帧。然后将所有这些方法汇总在一张表下作为新的数据框。

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

4

2 回答 2

2

我正在做一些令人费解的事情lapplycolMeans在我意识到使用from会容易之前。为了完整起见,我展示了这两种方法如何在一些 5 列宽 x 120 行长的虚拟数据上产生相同的结果:rollapplypackage:zoo

    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
于 2013-04-10T18:46:57.480 回答
0

显然没有对您的数据进行测试,但在 help(aggregate) 中的第一个示例中进行了测试

dflen <- nrow(dfrm)
aggregate(dfrm, list(rep(1:(dflen/60 +1), each=60, length=dflen) ), mean)
于 2013-04-10T18:47:21.197 回答