Fonctions de tri

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

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 08 Nov 2006, 14:16

bonjour,

pour ton problème, tu peux utiliser la fonction 'order',mais il ne faut pas l'utiliser "brutalement" sur la matrice.
(cf par exemple : http://pbil.univ-lyon1.fr/R/cours/lang03.pdf)

voici un exemple d'utilisation de la fonction 'order' pour trier une matrice en fonction d'une colonne (la colonne 2 dans cet exemple):

Code : Tout sélectionner

> ?order
> x <- matrix(rnorm(25),5,5)
> x
           [,1]       [,2]       [,3]       [,4]       [,5]
[1,]  2.0057186  0.1575606  0.4504245 -0.9442988  0.7960927
[2,] -2.0705715  0.9333887  0.6595509 -0.7658900  0.9864283
[3,]  3.0557424  0.3028283 -1.0314207 -0.9537793 -0.7945317
[4,] -0.2613506 -1.9561502 -2.3710229 -0.3980044 -0.3088180
[5,] -0.4543933  0.3535367 -0.3245763 -0.3112171  0.3614448

# on trie en fonction de la deuxième colonne
> x[order(x[,2]),]
           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] -0.2613506 -1.9561502 -2.3710229 -0.3980044 -0.3088180
[2,]  2.0057186  0.1575606  0.4504245 -0.9442988  0.7960927
[3,]  3.0557424  0.3028283 -1.0314207 -0.9537793 -0.7945317
[4,] -0.4543933  0.3535367 -0.3245763 -0.3112171  0.3614448
[5,] -2.0705715  0.9333887  0.6595509 -0.7658900  0.9864283

> x[order(x[,2],decreasing =T),]
           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] -2.0705715  0.9333887  0.6595509 -0.7658900  0.9864283
[2,] -0.4543933  0.3535367 -0.3245763 -0.3112171  0.3614448
[3,]  3.0557424  0.3028283 -1.0314207 -0.9537793 -0.7945317
[4,]  2.0057186  0.1575606  0.4504245 -0.9442988  0.7960927
[5,] -0.2613506 -1.9561502 -2.3710229 -0.3980044 -0.3088180
> x[order(x[,2],decreasing =F),]
           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] -0.2613506 -1.9561502 -2.3710229 -0.3980044 -0.3088180
[2,]  2.0057186  0.1575606  0.4504245 -0.9442988  0.7960927
[3,]  3.0557424  0.3028283 -1.0314207 -0.9537793 -0.7945317
[4,] -0.4543933  0.3535367 -0.3245763 -0.3112171  0.3614448
[5,] -2.0705715  0.9333887  0.6595509 -0.7658900  0.9864283
>



@+

Pierre
=@===--------¬-------¬------¬-----¬
liens utiles :
http://www.gnurou.org/Writing/SmartQuestionsFr
http://neogrifter.free.fr/welcomeOnInternet.jpg
]<((((*< -------------------------------

Varin Thibault
Messages : 31
Enregistré le : 08 Nov 2006, 11:23

Merci

Messagepar Varin Thibault » 08 Nov 2006, 16:51

Effectivement ça marche très bien, en fait j'avais cherché une fonction ou un argument qui effectue directement le trie mais c'était plutôt un problème de syntaxe...
Merci, j'y penserai pour d'autres problèmes...
Cordialement

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 08 Nov 2006, 18:18

Ce sujet a déjà été traité sur ce forum, mais il n'est peut-être pas inutile de rappeler que vue sous l'angle du langage R, une matrice est un vecteur muni d'un attribut de dimension, ce qui explique que si on applique order ou sort sur une matrice, elle est triée indépendamment des lignes et colonnes:

Code : Tout sélectionner

> mat <- matrix(11:14, ncol = 2, byrow = TRUE)
> mat
     [,1] [,2]
[1,]   11   12
[2,]   13   14
> dim(mat)
[1] 2 2
> dim(mat) <- NULL
> mat
[1] 11 13 12 14
> dim(mat) <- c(2, 2)
> mat
     [,1] [,2]
[1,]   11   12
[2,]   13   14
> sort(mat)
[1] 11 12 13 14
> order(mat)
[1] 1 3 2 4


Renaud

Varin Thibault
Messages : 31
Enregistré le : 08 Nov 2006, 11:23

Messagepar Varin Thibault » 09 Nov 2006, 08:31

Effectivement, ça m'avait surpris mais tout s'explique, merci encore!


Retourner vers « Questions en cours »

Qui est en ligne

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