Как сделать так, чтобы значения вашего рейтинга отображались целым числом (без десятичных знаков) в R data.table - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно ранжировать набор данных, упорядоченный по нескольким переменным в этом наборе данных и сгруппированный по другой его переменной.Когда я использую методы ранжирования в 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

1 Ответ

4 голосов
/ 26 марта 2019

вы можете указать, как вы хотите обрабатывать связи в frank.Существует аргумент ties.method, который по умолчанию равен усредненному, что приводит к десятичным разрядам.Подробнее см. ?frank.

Например, вы можете установить

dt1[, rank := frank(date, ties.method = "min"), by = list(id)]

для получения целых рангов.

...