Вы можете group
, arrange
и rownumber
.Результат немного проще для глаз, чем простой rank
, я думаю, и поэтому стоит дополнительного шага.
dt %>%
group_by(V1) %>%
arrange(V1,desc(V2)) %>%
mutate(rank = row_number())
# A tibble: 14 x 3
# Groups: V1 [4]
V1 V2 rank
<int> <int> <int>
1 1 390 1
2 1 366 2
3 1 276 3
4 1 112 4
5 2 402 1
6 2 400 2
7 2 198 3
8 2 97 4
9 3 625 1
10 3 110 2
11 4 578 1
12 4 137 2
13 4 49 3
14 4 9 4
Зашифрованная альтернатива - min_rank
dt %>%
group_by(V1) %>%
mutate(min_rank(desc(V2)) )