Le guide complet : comment utiliser sort(), order() et Rank() dans R
Trois fonctions de R que les gens confondent souvent sont le tri , l’ordre et le classement .
Voici la différence entre ces fonctions :
- sort() triera un vecteur par ordre croissant
- order() renverra l’index de chaque élément d’un vecteur dans l’ordre trié
- Rank() attribuera un rang à chaque élément d’un vecteur (le plus petit = 1)
L’exemple suivant montre comment utiliser chacune de ces fonctions dans la pratique.
Exemple : utilisez sort(), order() et Rank() avec des vecteurs
Le code suivant montre comment utiliser les fonctions sort() , order() et Rank() avec un vecteur à quatre valeurs :
#create vector
x <- c(0, 20, 10, 15)
#sort vector
sort(x)
[1] 0 10 15 20
#order vector
order(x)
[1] 1 3 4 2
#rank vector
rank(x)
[1] 1 4 2 3
Voici ce que chaque fonction a fait :
1. La fonction sort() triait simplement les valeurs du vecteur par ordre croissant.
2. La fonction order() a renvoyé l’index de chaque élément dans l’ordre trié.
- Si vous mettez les valeurs du vecteur d’origine dans l’ordre en fonction de ces valeurs d’index, vous obtiendrez un vecteur trié.
- Par exemple, order() nous dit de mettre d’abord la valeur en position d’index 1 – c’est 0 dans le vecteur d’origine.
- Ensuite, order() nous dit de mettre ensuite la valeur en position d’index 3 – c’est 10 dans le vecteur d’origine.
- Ensuite, order() nous dit de mettre ensuite la valeur en position d’index 4 – c’est 15 dans le vecteur d’origine.
- Ensuite, order() nous dit de mettre ensuite la valeur en position d’index 2 – c’est 20 dans le vecteur d’origine.
- Le résultat final est un vecteur trié – 0, 10, 15, 20.
3. La fonction Rank() attribuait un rang à chaque élément du vecteur, en utilisant 1 pour la plus petite valeur.
- Par exemple, Rank() nous indique que la première valeur du vecteur d’origine est la plus petite (rang = 1) et que la deuxième valeur du vecteur d’origine est la plus grande (rang = 4).
Notez que nous pouvons utiliser la syntaxe suivante pour utiliser sort() , order() et rang() dans l’ordre inverse :
#create vector
x <- c(0, 20, 10, 15)
#sort vector in decreasing order
sort(x, decreasing=TRUE)
[1] 20 15 10 0
#order vector in decreasing order
order(x, decreasing=TRUE)
[1] 2 4 3 1
#rank vector in reverse order (largest value = 1)
rank(-x)
[1] 4 1 3 2
Notez que ces résultats sont exactement à l’opposé de ceux produits dans les exemples précédents.
Remarque : Comment gérer les égalités avec la fonction Rank()
Nous pouvons utiliser l’argument tie.method pour spécifier comment nous devons gérer les égalités lors de l’utilisation de la fonction Rank() :
rank(x, ties.method='average')
Vous pouvez utiliser l’une des options suivantes pour spécifier comment gérer les liens :
- moyenne : (Par défaut) Attribue à chaque élément lié le rang moyen (les éléments classés en 3ème et 4ème position recevraient tous deux un rang de 3,5)
- premier : Attribue le premier élément lié au rang le plus bas (les éléments classés en 3ème et 4ème positions recevraient respectivement les rangs 3 et 4)
- min : Assigne chaque élément lié au rang le plus bas (les éléments classés en 3ème et 4ème position recevraient tous deux un rang de 3)
- max : Attribue à chaque élément lié le rang le plus élevé (les éléments classés en 3ème et 4ème position recevraient tous deux un rang de 4)
- aléatoire : attribue à chaque élément à égalité un rang aléatoire (l’un ou l’autre des éléments à égalité pour la 3ème et la 4ème position pourrait recevoir l’un ou l’autre rang)
Selon votre scénario, l’une de ces méthodes peut être plus judicieuse à utiliser que les autres.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans R :
Comment trier par plusieurs colonnes dans R
Comment trier une trame de données par date dans R
Comment calculer le rang centile dans R