R:按组获取因子水平的排名
R: Get ranking of factor levels by group
现在我只有 Number
和 Days
列的 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_rank
或as.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
现在我只有 Number
和 Days
列的 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_rank
或as.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