2013-02-20 4 views
17

私はRプログラミングの初心者で、50列の行列に1つの余分な列を追加しようとしています。この新しい列は、その行の最初の10個の値の平均値になります。Rプログラミング - 既存の行列に余分な列を追加する

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 
} 

これは私がこの

cbind(randomMatrix,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を使用している場合、すべての古い値は、1行のために働きます上書きされます。

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

+2

私はあなたがラウンド 'X [I、J]'を指し、間違った方法をインデックスあなたの行列を取得していると思います行「i」および列「j」。また、 'generateMatrix'はどこから来ましたか? – mnel

+0

これは問題の一部を解決します。しかし、 'randomMatrix'に追加の列を追加する方法があります。 もしそうでなければ、 'randomMatrix51'を 'randomMatrix'に 'cbind'しなければなりません。 generateMatrixは、params(lower lim、upper lim、行数なし、colmn)を持つ関数です。 R. – user2085566

+0

'transform(randomMatrix、new.col = new.data)'の標準ライブラリに組み込まれた関数 'Rに完全に切り取って貼り付けることができるはるかに小さな例を与えたら、あなたの望む結果のより良い説明。 – N8TRO

答えて

4

あなたはこれを考えています。

a <- matrix(1:5000, nrow=100) 
a <- transform(a, first10ave = colMeans(a[1:10,])) 
+2

これは、平均(a [1:10、])が各行に対して計算されないため、新しい列の各行に同じ値を与えます。 – thelatemail

31

Bam!使用する

大きなそれはしかし、高速でのデータセット(そして、おそらく単純)で
a <- matrix(1:5000, nrow=100) 
a <- cbind(a,apply(a[,1:10],1,mean)) 

cbind(a, rowMeans(a[,1:10])) 
関連する問題