26

私は 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)

しかし、これは 1 行でしか機能しません。この cbind をループで使用すると、すべての古い値が上書きされます。

新しい列に最初の 10 個の値の平均を追加するにはどうすればよいですか。行をループする以外にこれを行うより良い方法はありますか?

4

2 に答える 2

40

バム!

a <- matrix(1:5000, nrow=100)
a <- cbind(a,apply(a[,1:10],1,mean))

ただし、大きなデータセットでは、使用する方が高速です (そして間違いなく簡単です)。

cbind(a, rowMeans(a[,1:10]) )
于 2013-02-20T06:10:00.410 に答える
4

あなたはこれを考えすぎていると思います。

a <- matrix(1:5000, nrow=100)
a <- transform(a,  first10ave = colMeans(a[1:10,]))
于 2013-02-20T06:04:43.753 に答える