2017-12-18 1 views
1

Bevor ich versuche, eine benutzerdefinierte Funktion zu schreiben; Gibt es eine elegante/native Methode, um dies zu erreichen?Sortiermatrixelemente basierend auf diagonaler Position in R

m<-matrix(1:9,ncol = 3) 
m 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 

Durch Säule:

as.vector(m) 
[1] 1 2 3 4 5 6 7 8 9 

für Reihe:

as.vector(t(m)) 
[1] 1 4 7 2 5 8 3 6 9 

durch diagonale (I würde eine Funktionsausgabe mögen):

some.function(m) 
[1] 1 2 4 3 5 7 6 8 9 

und der Senkrechten diagonal:

some.other.function(m) 
[1] 7 8 4 9 5 1 6 2 3 
+1

Es ist eine ziemlich gute Lösung, die Sie auf Ihre Frage hier anpassen können: https://stackoverflow.com/questions/27935555/get-all-diagonal-vectors-from-matrix – Lamia

Antwort

1
ind = expand.grid(1:3, 1:3) 
ind[,3] = rowSums(ind) 
ind = ind[order(ind[,3], ind[,2], ind[,1]),] 

m[as.matrix(ind[,1:2])] 
#[1] 1 2 4 3 5 7 6 8 9 

m[,3:1][as.matrix(ind[,1:2])] 
#[1] 7 8 4 9 5 1 6 2 3 
Verwandte Themen