2017-09-21 14 views
0

で行列の1列に私のような行列持っている:私は総括し、複数たとえば、3列などを組み合わせたいみとめ列の合計R

m <- matrix(c(1:32),ncol = 8) 

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] 
[1,] 1 5 9 13 17 21 25 29 
[2,] 2 6 10 14 18 22 26 30 
[3,] 3 7 11 15 19 23 27 31 
[4,] 4 8 12 16 20 24 28 32 

を。列1,2および3を選択し、列1の値を結果のベクトルで置き換えます。

 [,1] [,4] [,5] [,6] [,7] [,8] 
[1,] 15 13 17 21 25 29 
[2,] 18 14 18 22 26 30 
[3,] 21 15 19 23 27 31 
[4,] 24 16 20 24 28 32 

私の質問はこれを行うための最良の方法です。

私は合計をとり、行列をベクトルで置き換えました。

X<-rowSums(m[,c(1,2,3)]); m[,1] <- X; m <- m[,-c(2,3)] 

私の場合、列の名前が付けられます。これを行うより良い方法はありますか?

答えて

2

私たちはサブセットする列の数値インデックスを使用し、ビットより長いですapplyを使用します。また、頼ることができrowSums

cbind(rowSums(m[,1:3]), m[, -(1:3)]) 
#  [,1] [,2] [,3] [,4] [,5] [,6] 
#[1,] 15 13 17 21 25 29 
#[2,] 18 14 18 22 26 30 
#[3,] 21 15 19 23 27 31 
#[4,] 24 16 20 24 28 32 
+0

お返事ありがとうございます。私はこれを最初にやったが、ここでやったことと同じくらい、私の大きな行列には多くの時間を費やしている。 –

0

で使用されていない列で、その後rowSumscbind行うことができますrowSums()アプローチよりも

cbind(apply(m[,-c(4:ncol(m))], 1, function(x){sum(x,na.rm=T)}), m[,c(4:ncol(m))]) 

#  [,1] [,2] [,3] [,4] [,5] [,6] 
#[1,] 15 13 17 21 25 29 
#[2,] 18 14 18 22 26 30 
#[3,] 21 15 19 23 27 31 
#[4,] 24 16 20 24 28 32 

しかし、rowSumsは確かに計算上高速な方法です。

関連する問題