Пакет data.table предлагает откровенный (быстрый рейтинг), который намного быстрее, чем рейтинг. Фрэнк также предлагает дополнительный метод tie.tod, называемый «плотный», и это именно то, что вам нужно.
library(data.table)
A <- data.table("ID" = c(1,2,3,4,5,6,7),
"Date" = c("01-01-2018",
"02-01-2018",
"03-01-2018",
"03-01-2018",
"03-01-2018",
"04-01-2018",
"04-01-2018"))
A[, rank := frank(Date, ties.method ="dense")]
> A
ID Date rank
1: 1 01-01-2018 1
2: 2 02-01-2018 2
3: 3 03-01-2018 3
4: 4 03-01-2018 3
5: 5 03-01-2018 3
6: 6 04-01-2018 4
7: 7 04-01-2018 4
Вы также можете использовать функцию build it .GRP (count group) в сочетании с «by»:
A[, rank := .GRP, by = Date]
Результат точно такой же, как указано выше.