R:按组获取因子水平的排名

R: Get ranking of factor levels by group

现在我只有 NumberDays 列的 df。

我想在名为 Ranking 的单独列中获得 df$Days 的因子水平排名。

    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))

我的方法是按天对数据进行分组,然后对新列进行变异,但后来我卡住了如何将排名分配给新列

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

你能帮我解决这个问题吗?该代码应该适用于任意数量的因子水平(最多 20 个不同的天数)

非常感谢您!

base R中使用dplyr::dense_rankas.numeric(factor(Days, ordered = T)):

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

输出

# 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