Мне нужно ранжировать набор данных, упорядоченный по нескольким переменным в этом наборе данных и сгруппированный по другой его переменной.Когда я использую методы ранжирования в data.table, значения ранжирования являются десятичными.Мне нужно, чтобы они были целыми числами без десятичной части.
Ниже, я предоставляю сводку того, что мне нужно.Я копирую чужой пример из другого вопроса на этом сайте (а также в отношении методов ранжирования).Я нашел ответ на этот вопрос полезным, но он по-прежнему не позволяет сделать результат ранжирования целым числом без десятичных дробей.Вот почему я копирую это здесь и принимаю это как отправную точку для этого вопроса (поскольку не разрешено задавать разные вопросы под ответом).
Мне нужно ранжировать на основе нескольких переменных, сгруппированных поодин (или несколько переменных), а затем получить целочисленное ранжирование без десятичных дробей.
Вот пример этого другого человека:
Он создает таблицу данных:
library(data.table)
t1 <- data.table (id = c('11', '11', '11', '22','22',
'88', '99','44','44', '55'),
date = as.Date(c("01-01-2016",
"01-02-2016",
"01-02-2016",
"02-01-2016",
"02-02-2016"),
format = "%m-%d-%Y"))
setkey(dt1, date)
setkey(dt1, id)
dt1
id date
1: 11 2016-01-01
2: 11 2016-01-02
3: 11 2016-01-02
4: 22 2016-02-01
5: 22 2016-02-02
6: 44 2016-01-02
7: 44 2016-02-01
8: 55 2016-02-02
9: 88 2016-01-01
10: 99 2016-01-02
И здесь он ранжируется на основе переменной date
и группируется по id
:
dt1[, rank := frank(date), by = list(id)]
dt1
id date rank
1: 11 2016-01-01 1.0
2: 11 2016-01-02 2.5
3: 11 2016-01-02 2.5
4: 22 2016-02-01 1.0
5: 22 2016-02-02 2.0
6: 44 2016-01-02 1.0
7: 44 2016-02-01 2.0
8: 55 2016-02-02 1.0
9: 88 2016-01-01 1.0
10: 99 2016-01-02 1.0
Результаты должны быть такими:
id date rank
1: 11 2016-01-01 1
2: 11 2016-01-02 2
3: 11 2016-01-02 2
4: 22 2016-02-01 1
5: 22 2016-02-02 2
6: 44 2016-01-02 1
7: 44 2016-02-01 2
8: 55 2016-02-02 1
9: 88 2016-01-01 1
10: 99 2016-01-02 1