【发布时间】:2019-03-26 15:42:42
【问题描述】:
我必须对一个数据集进行排名,该数据集由该数据集中的几个变量排序,并由该数据集中的另一个变量分组。当我在 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
【问题讨论】:
-
试试
floor(frank(date))
标签: r data.table ranking