Trier les lignes pour chaque colonne d'une matrice

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Diane MANZON
Messages : 56
Enregistré le : 18 Juin 2018, 08:31

Trier les lignes pour chaque colonne d'une matrice

Messagepar Diane MANZON » 03 Juin 2019, 19:16

Bonjour à tous,

Je bloque sur une problématique qui doit être très simple!
J'ai une matrice (par exemple, voir ci_dessous)

Code : Tout sélectionner

a <- matrix(c(3,9,5,5,7,2,1,3,8), nrow=3, ncol=3)
a
     [,1] [,2] [,3]
[1,]    3    5    1
[2,]    9    7    3
[3,]    5    2    8


Je souhaite ordonner chaque colonne par ordre croissant sachant que les lignes ne sont pas liées d'une colonne à l'autre.
Or, si je fais:

Code : Tout sélectionner

a <- a[order(a[,1], decreasing=FALSE),]
a
     [,1] [,2] [,3]
[1,]    3    5    1
[2,]    5    2    8
[3,]    9    7    3


Ma première colonne est ordonnée par ordre croissant

Mais si je fais:

Code : Tout sélectionner

a <- a[order(a[,2], decreasing=FALSE),]
a
     [,1] [,2] [,3]
[1,]    5    2    8
[2,]    3    5    1
[3,]    9    7    3


Ma deuxième colonne est ordonnée par ordre croissant mais plus la première.

En réalité, j'ai une matrice de 10 lignes et 5025 colonnes et je voudrais que toutes les lignes de chaque colonne soient ordonnées mais pas une colonne en fonction d'une autre....

J'espère avoir été assez claire...

Merci beaucoup par avance!!
Bonne soirée

Diane

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Trier les lignes pour chaque colonne d'une matrice

Messagepar Logez Maxime » 03 Juin 2019, 19:54

Bonjour,

alors il te faut le faire colonne par colonne par exemple avec la fonction apply :

Code : Tout sélectionner

apply(a, 2, sort)
Cordialement,
Maxime

Diane MANZON
Messages : 56
Enregistré le : 18 Juin 2018, 08:31

Re: Trier les lignes pour chaque colonne d'une matrice

Messagepar Diane MANZON » 03 Juin 2019, 20:07

Logez Maxime a écrit :Bonjour,

alors il te faut le faire colonne par colonne par exemple avec la fonction apply :

Code : Tout sélectionner

apply(a, 2, sort)
Cordialement,
Maxime


Merci pour ta réponse Maxime !

J'ai trouvé pour le faire en une fois (bon avec une boucle... mais ça marche!) :

Code : Tout sélectionner

a <- matrix(c(3,9,5,5,7,2,1,15,8), nrow=3, ncol=3)
b <- matrix( numeric(), ncol=ncol(a), nrow=nrow(a))
for (i in 1:ncol(a)){
  b[,i] <- a[,i][order(a[,i], decreasing=FALSE)]
}


:D


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité