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

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables