Classer des valeurs avec rank()
Attribuez des rangs avec les méthodes de résolution des ex æquo : average, first, min, max et random.
Classer des valeurs avec rank() est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.
Ce que renvoie rank()
rank(x) renvoie les rangs des valeurs d’un vecteur dans l’échantillon. La plus petite valeur reçoit le rang 1, la deuxième plus petite le rang 2, et ainsi de suite. Contrairement à order(), le résultat a la même longueur que l’entrée, chaque position contenant son rang.
scores <- c(78, 92, 65, 88, 71)
ranks <- rank(scores)
print(scores)
print(ranks)Gérer les égalités : méthode de la moyenne
Lorsque des valeurs sont égales, rank() utilise l’argument ties.method pour déterminer les rangs à attribuer. La valeur par défaut est 'average' : les éléments à égalité reçoivent la moyenne des rangs qu’ils auraient occupés.
x <- c(10, 20, 20, 30)
# Default: average of positions 2 and 3 = 2.5
rank(x)
rank(x, ties.method = 'average')Méthode de gestion des égalités : first et last
ties.method = 'first' attribue le rang le plus faible à l’élément à égalité qui apparaît en premier dans le vecteur. 'last' fait l’inverse : l’élément situé avant reçoit le rang le plus élevé.
x <- c(10, 20, 20, 30)
cat('first:', rank(x, ties.method = 'first'), '\n')
cat('last: ', rank(x, ties.method = 'last'), '\n')Méthode de gestion des égalités : min et max
'min' attribue à tous les éléments à égalité le rang minimal qu’ils pourraient obtenir (comme dans le sport : deux joueurs à égalité à la 3e place reçoivent tous deux le rang 3, et personne ne reçoit le rang 4). 'max' attribue à tous les éléments à égalité le rang maximal.
x <- c(10, 20, 20, 30)
cat('min:', rank(x, ties.method = 'min'), '\n')
cat('max:', rank(x, ties.method = 'max'), '\n')Méthode de gestion des égalités : random
ties.method = 'random' départage les égalités en attribuant aléatoirement des rangs distincts aux éléments concernés. Chaque appel peut produire un résultat différent. Cette méthode est utile lorsque vous avez besoin de rangs entiers uniques, sans vous soucier de l’ordre de départage des égalités.
x <- c(10, 20, 20, 20, 30)
set.seed(42)
cat('random run 1:', rank(x, ties.method = 'random'), '\n')
set.seed(99)
cat('random run 2:', rank(x, ties.method = 'random'), '\n')Classement dense et classement standard
Dans R, rank() produit un classement standard de compétition (1, 2, 2, 4). Pour obtenir un classement dense (1, 2, 2, 3, sans saut), utilisez rank(x, ties.method = 'min') sur les valeurs uniques, ou utilisez les packages data.table ou dplyr. Voici une solution de contournement en R de base :
x <- c(10, 20, 20, 30)
# Standard ranking (gaps after ties)
cat('Standard:', rank(x, ties.method = 'min'), '\n')
# Dense ranking: rank of sorted unique values
dense <- match(x, sort(unique(x)))
cat('Dense: ', dense, '\n')rank() ou order() ou sort()
Ces trois fonctions sont liées, mais renvoient des éléments différents : sort(x) renvoie les valeurs triées, order(x) renvoie les positions qui permettent de trier le vecteur, et rank(x) renvoie le rang de chaque position. Voici une comparaison côte à côte.
x <- c(30, 10, 50, 20, 40)
cat('x :', x, '\n')
cat('sort(x) :', sort(x), '\n')
cat('order(x):', order(x), '\n')
cat('rank(x) :', rank(x), '\n')Classement par ordre décroissant
Pour classer du plus grand au plus petit (rang 1 = valeur la plus élevée), annulez le vecteur avant de le transmettre à rank(). C'est le modèle utilisé pour les classements où le rang 1 désigne le meilleur résultat.
scores <- c(78, 92, 65, 88, 71)
desc_ranks <- rank(-scores)
cat('Scores: ', scores, '\n')
cat('Rank (best=1):', desc_ranks, '\n')Ajouter des rangs à un cadre de données
Une tâche courante consiste à ajouter une colonne de rang à un cadre de données. Utilisez rank() avec ties.method = 'min' et annulez les valeurs pour un classement décroissant afin de construire un classement correct.
df <- data.frame(
player = c('Alice', 'Bob', 'Carol', 'Dave'),
score = c(250, 400, 250, 375)
)
df$rank <- rank(-df$score, ties.method = 'min')
df[order(df$rank), ]rank() avec des valeurs NA
rank() possède un argument na.last, tout comme sort() et order(). La valeur par défaut est 'keep' : elle attribue le rang NA aux valeurs NA, tout en classant les éléments qui ne sont pas NA entre eux.
x <- c(5, NA, 2, NA, 8, 1)
cat('na.last=keep: ', rank(x, na.last = 'keep'), '\n')
cat('na.last=TRUE: ', rank(x, na.last = TRUE), '\n')
cat('na.last=FALSE: ', rank(x, na.last = FALSE), '\n')Rangs en centiles
Convertissez les rangs en centiles en les divisant par le nombre total d'éléments. Un rang en centile indique quelle fraction des valeurs est inférieure ou égale à un élément donné. C'est utile en statistique et pour l'évaluation pédagogique.
scores <- c(60, 75, 82, 91, 68, 77, 85, 95)
n <- length(scores)
pct_rank <- rank(scores) / n * 100
result <- data.frame(score = scores, percentile = round(pct_rank, 1))
result[order(result$score), ]Vérification rapide
Quel ties.method attribue à tous les éléments ex æquo le même rang le plus bas possible (comme dans les compétitions sportives, où deux joueurs partagent la 3e place et où personne n'obtient la 4e) ?
Points essentiels de rank()
Points essentiels concernant rank() :
rank(x)renvoie le rang de chaque élément (avec la même longueur que l'entrée)- Par défaut,
ties.method = 'average': les éléments ex æquo partagent la moyenne de leurs rangs 'min'= style sportif (rang le plus bas partagé),'max'= rang le plus élevé partagé'first'et'last'départagent les ex æquo selon leur ordre d'apparition- Utilisez
rank(-x)pour un classement décroissant (rang 1 = valeur la plus élevée) - Ajoutez des colonnes de rang aux cadres de données avec
df$rank <- rank(-df$score, ties.method='min')
x <- c(10, 30, 20, 30, 10)
cat('average:', rank(x, ties.method = 'average'), '\n')
cat('min: ', rank(x, ties.method = 'min'), '\n')
cat('max: ', rank(x, ties.method = 'max'), '\n')
cat('first: ', rank(x, ties.method = 'first'), '\n')Questions Fréquemment Posées
La leçon « Classer des valeurs avec rank() » est-elle gratuite ?
Oui — le texte complet de « Classer des valeurs avec rank() » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Classer des valeurs avec rank() » ?
Attribuez des rangs avec les méthodes de résolution des ex æquo : average, first, min, max et random. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer R Academy ?
Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Classer des valeurs avec rank() » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon R Academy ?
Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Trier des vecteurs avec sort()
- order() pour un classement flexible
- Classer des valeurs avec rank()
- Trier des data frames par colonne