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

Comment signer la connexion OKEx API version 5 avec websockets ?

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

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