In R, adding T prefix to tie ranks

Viewed 20
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

How to update the code above to convert a_rank into a string column and add a T prefix to any ranks that are ties.

   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
1 Answers

We can use an ifelse statement along with duplicated to find all the duplicated values and if they are duplicated then paste T to those values.

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", .),.)))

Output

   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
Related