J'ai une matrice
df<-matrix(data=c(3,7,5,0,1,0,0,0,0,8,0,9), ncol=2)
rownames(df)<-c("a","b","c","d","e","f")
[,1] [,2]
a 3 0
b 7 0
c 5 0
d 0 8
e 1 0
f 0 9
et je voudrais ordonner la matrice en ordre décroissant d'abord par la colonne 1, puis par la colonne deux résultant en la matrice
df.ordered<-matrix(data=c(7,5,3,1,0,0,0,0,0,0,9,8),ncol=2)
rownames(df.ordered)<-c("b","c","a","e","f","d")
[,1] [,2]
b 7 0
c 5 0
a 3 0
e 1 0
f 0 9
d 0 8
Des suggestions sur la façon dont je pourrais y parvenir? Merci.
La fonction order
devrait le faire.
df[order(df[,1],df[,2],decreasing=TRUE),]
Pour compléter la réponse principale, voici un moyen de le faire par programmation, sans avoir à spécifier les colonnes à la main:
set.seed(2013) # preparing my example
mat <- matrix(sample.int(10,size = 30, replace = T), ncol = 3)
mat
[,1] [,2] [,3]
[1,] 5 1 6
[2,] 10 3 1
[3,] 8 8 1
[4,] 8 9 9
[5,] 3 7 3
[6,] 8 8 5
[7,] 10 10 2
[8,] 8 10 7
[9,] 10 1 9
[10,] 9 4 5
Comme exemple simple, disons que je veux utiliser toutes les colonnes dans leur ordre d'apparition pour trier les lignes de la matrice: (On pourrait facilement donner un vecteur d'index à la matrice)
mat[do.call(order, as.data.frame(mat)),] #could be ..as.data.frame(mat[,index_vec])..
[,1] [,2] [,3]
[1,] 3 7 3
[2,] 5 1 6
[3,] 8 8 1
[4,] 8 8 5
[5,] 8 9 9
[6,] 8 10 7
[7,] 9 4 5
[8,] 10 1 9
[9,] 10 3 1
[10,] 10 10 2
order
la fonction vous aidera, essayez ceci:
df[order(-df[,1],-df[,2]),]
[,1] [,2]
b 7 0
c 5 0
a 3 0
e 1 0
f 0 9
d 0 8
Le signe moins avant df
indique que l'ordre diminue. Vous obtiendrez le même paramètre de résultat decreasing=TRUE
.
df[order(df[,1],df[,2],decreasing=TRUE),]