如何让你的排名值在 R data.table 中显示整数(不带小数)

How to make your ranking values show integer (without decimals) in R data.table

我必须对按此数据集中的几个变量排序并按其中另一个变量分组的数据集进行排名。当我在 data.table 上使用排名方法时,排名值是小数。我需要它们是没有小数部分的整数。

贝娄,我提供了我需要的摘要。我从本网站的另一个问题中复制了别人的例子(也与排名方法有关)。我发现这个问题的答案很有用,但它仍然没有提供使排名结果成为没有小数的整数的方法。这就是为什么我把它复制在这里并以此作为这个问题的起点(因为不允许在一个答案下提出不同的问题)。

我需要根据几个变量进行排名,按一个(或多个变量)分组,然后得到一个不带小数的整数排名。

这是另一个人的例子:

他创造了数据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

您可以在 frank 中指定处理平局的方式。 有一个参数 ties.method 默认为平均值,这会导致十进制排名。有关详细信息,请参阅 ?frank

你可以,例如设置

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

获得整数排名。