2016-06-01 25 views
-1

neu anordnen Eine Matrix, mit der ich arbeite, sieht so aus. Es ist quadratischMatrix in R

structure(c(3, 4, 2, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 
    0, 0, 0, 2, 2, 0, 3, 9), .Dim = c(5L, 5L), .Dimnames = list(c("a1", 
    "a2", "a3", "a4", "a5"), c("a1", "a2", "a3", "a4", "a5"))) 

ich brauche die Elemente unterhalb und oberhalb der Triagonal zu addieren und das obere Dreieck der Matrix zu leeren. Das Ergebnis sieht so aus:

  structure(c(3, 4, 2, 4, 2, 0, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 3, 0, 0, 0, 0, 9), .Dim = c(5L, 5L), .Dimnames = list(c("a1", 
"a2", "a3", "a4", "a5"), c("a1", "a2", "a3", "a4", "a5"))) 

Gibt es einen effizienten Weg, das zu tun? So fügen Sie einfach UPT die Werte der unteren und der oberen Hälfte in der unteren Hälfte des Elements -

+0

nicht, schauen Sie bitte auf den Unterschied in m [3,2] und m [2 , 3] - das Element ist addiert 2 und 1 - ist 3 – kutyw

+0

Bitte überprüfen Sie die Lösung unten. Es gibt die erwartete Ausgabe. – akrun

Antwort

0

Wir können versuchen,

m1[lower.tri(m1)] <- m1[lower.tri(m1)] + t(m1)[lower.tri(m1)] 
m1[upper.tri(m1)] <- 0 
identical(m1, m2) 
#[1] TRUE 
+0

so würde das auch funktionieren, wenn wir Ihre Lösung matr [row.name (m1), Spaltennamen (m1)] <- matr [Zeilen.Name (m1), Spaltennamen (m1)] + m1 aus der vorherigen Frage rechts - so verwenden die ganze Matrix bekommen und dann zusammenfassen? – kutyw

+0

@kutyw Ich hoffe es, aber das ist die Antwort auf die aktuelle Frage. Wenn es für diese Frage funktioniert, denken Sie bitte daran, die Lösung zu akzeptieren, indem Sie auf das Häkchen neben der Abstimmung klicken. – akrun

+0

Was macht der Code mit der Diagonale? es setzt es auf Null richtig? weil die Diagonale durch R> – kutyw