2017-09-21 5 views
0

Ich habe eine Matrix wie:Summe der mutiple Spalten von Zeilenwerte in einer einzigen Spalte einer Matrix in 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 

Ich möchte zusammenzufassen und mehrere sagen wir, 3 Spalten zB kombinieren. Spalten 1,2 und 3 und ersetzen den Wert von Spalte 1 durch den resultierenden Vektor.

 [,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 

Meine Frage ist, was der beste Weg ist, dies zu tun.

Ich habe die Summe genommen und die Matrix durch den Vektor ersetzt.

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

Die Spalten sind in meinem Fall benannt. Gibt es einen besseren Weg, dies zu tun?

Antwort

2

Wir können den numerischen Index der Spalten verwenden, um die rowSums zu Teil und tun, dann cbind mit den Spalten, die nicht in den 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

Danke für die schnelle Antwort. Ich habe das anfangs gemacht, aber ich brauche viel Zeit für meine große Matrix, nicht weniger als das, was ich hier gemacht habe. –

0

verwendet werden, könnten Sie greifen auch apply zu verwenden, die Bit längere als der rowSums() Ansatz. Jedoch

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 

würde rowSums zweifellos der rechnerisch schnelle Weg zu gehen.

Verwandte Themen