Home > Software engineering >  R: Get ranking of factor levels by group
R: Get ranking of factor levels by group

Time:05-18

For now I have only the df with the columns Number and Days.

I want to get a ranking of the factor levels of df$Days in a separate column which is called Ranking.

    df <- data.frame(Number = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
                 Days = c(5,5,10,10,15,3,3,3,5,5,11,11,13,13,13),
                 Ranking = c(1,1,2,2,3,1,1,1,2,2,1,1,2,2,2))

My approach would be to group the data by Days and then mutate then the new column, but then I´m stuck how to assign the ranking to the new column

library(dplyr)
df_new <- df %>%
   dplyr::group_by(Days) %>%
   dplyr::mutate(Ranking = count(unique(levels(Days))) # This does not work obviously

Can you help me with that question? The code should work for any number of factor levels (could be up to 20 different Days)

Thank you very much in advance!

CodePudding user response:

Use dplyr::dense_rank, or as.numeric(factor(Days, ordered = T)) in base R:

df %>% 
  group_by(Number) %>% 
  mutate(Ranking = dense_rank(Days),
         Ranking2 = as.numeric(factor(Days, ordered = T)))

output

# A tibble: 15 × 4
# Groups:   Number [3]
   Number  Days Ranking Ranking2
    <dbl> <dbl>   <int>    <dbl>
 1      1     5       1        1
 2      1     5       1        1
 3      1    10       2        2
 4      1    10       2        2
 5      1    15       3        3
 6      2     3       1        1
 7      2     3       1        1
 8      2     3       1        1
 9      2     5       2        2
10      2     5       2        2
11      3    11       1        1
12      3    11       1        1
13      3    13       2        2
14      3    13       2        2
15      3    13       2        2
  • Related