Dans R, ajouter le préfixe T pour lier les rangs

data.frame(a = c(12, 13, 17, 19, 17), b = c(3, 5, 5, 4, 6)) %>% 
dplyr::mutate(a_rank = rank(desc(a), ties.method = "min"),
b_rank = rank(desc(b), ties.method = "min")) %>%
dplyr::arrange(a_rank)
a b a_rank b_rank
1 19 4 1 4
2 17 5 2 2
3 17 6 2 1
4 13 5 4 2
5 12 3 5 5

Comment mettre à jour le code ci-dessus pour le convertir a_ranken une colonne de chaîne et ajouter un Tpréfixe à tous les rangs qui sont à égalité.

 a b a_rank b_rank
1 19 4 1 4
2 17 5 T2 T2
3 17 6 T2 1
4 13 5 4 T2
5 12 3 5 5


Solution du problème

Nous pouvons utiliser une ifelsedéclaration avec duplicatedpour trouver toutes les valeurs dupliquées et si elles sont dupliquées, collez T-les sur ces valeurs.

library(tidyverse)
data.frame(a = c(12, 13, 17, 19, 17), b = c(3, 5, 5, 4, 6)) %>%
dplyr::mutate(a_rank = rank(desc(a), ties.method = "min"),
b_rank = rank(desc(b), ties.method = "min")) %>%
dplyr::arrange(a_rank) %>%
mutate(across(ends_with("rank"), ~ ifelse(duplicated(.) | duplicated(., fromLast = TRUE), paste0("T",.),.)))

Production

 a b a_rank b_rank
1 19 4 1 4
2 17 5 T2 T2
3 17 6 T2 1
4 13 5 4 T2
5 12 3 5 5

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"