私はRプログラミングの初心者で、50列の行列に1列追加しようとしています。この新しい列は、その行の最初の10個の値の平均になります。
randomMatrix <- generateMatrix(1,5000,100,50)
randomMatrix51 <- matrix(nrow=100, ncol=1)
for(ctr in 1:ncol(randomMatrix)){
randomMatrix51.mat[1,ctr] <- sum(randomMatrix [ctr, 1:10])/10
}
これにより、以下のエラーが発生します
Error in randomMatrix51.mat[1, ctr] <- sum(randomMatrix[ctr, 1:10])/10 :incorrect
number of subscripts on matrix
これを試した
cbind(randomMatrix,sum(randomMatrix [ctr, 1:10])/10)
しかし、このcbindをループで使用すると、古い値がすべて上書きされるため、1行でしか機能しません。
新しい列に最初の10個の値の平均を追加するにはどうすればよいですか。行をループする以外にこれを行うより良い方法はありますか?
バム!
a <- matrix(1:5000, nrow=100)
a <- cbind(a,apply(a[,1:10],1,mean))
ただし、大きなデータセットでは、以下を使用する方が高速です(ほぼ間違いなく簡単です)。
cbind(a, rowMeans(a[,1:10]) )
あなたはこれを考えすぎていると思います。
a <- matrix(1:5000, nrow=100)
a <- transform(a, first10ave = colMeans(a[1:10,]))