データ フレームがあり、すべての列の 60 レコードごとに平均を取り、新しいデータ フレームを返したいと考えています。
たとえば、行 1 から行 60 まで、次に行 61 から行 120 まで、次に 121 から 180 まで、すべての列の平均を取りたいと考えています。同様に、データ フレーム全体を調べます。次に、これらすべての手段を新しいデータ フレームとして 1 つのテーブルにまとめます。
誰でも私を助けることができますか?本当にありがとう!
lapply
と複雑なことをしていましたが、 fromを使用するとはるかに簡単にcolMeans
なることに気付く前に。完全を期すために、幅 5 列、長さ 120 行のダミー データで 2 つのアプローチがどのように同一の結果をもたらすかを示します。rollapply
package: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
明らかにあなたのデータではテストされていませんが、help(aggregate) の最初の例でテストされました
dflen <- nrow(dfrm)
aggregate(dfrm, list(rep(1:(dflen/60 +1), each=60, length=dflen) ), mean)