如何使您的排名值在R data.table中显示整数(无小数)
我必须对一个数据集进行排序,该数据集由几个变量排序,并由其中的另一个变量分组。当我在data.table上使用排名方法时,排名值是小数。我需要它们是不带小数点的整数 贝娄,我提供了一个我需要的摘要。我从这个网站上的另一个问题中复制了其他人的例子(也与排名方法有关)。我发现这个问题的答案很有用,但它仍然不能提供使排名结果成为不带小数的整数的方法。这就是为什么我把它复制到这里,并把它作为这个问题的起点(因为在一个答案下不允许问不同的问题) 我需要根据几个变量进行排名,按一个(或几个变量)分组,然后得到一个不带小数的整数排名 这是另一个人的例子: 他创建数据表:如何使您的排名值在R data.table中显示整数(无小数),r,data.table,ranking,R,Data.table,Ranking,我必须对一个数据集进行排序,该数据集由几个变量排序,并由其中的另一个变量分组。当我在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
结果应该是这样的:
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)]
获取整数等级。尝试
floor(frank(date))
Ah!好啊我知道我必须添加ties.method,但我只是在frank之外添加它,比如rank:=frank(date),by=list(id),ties.method=“min”]。所以它显然不起作用。。。非常感谢你。这很有帮助。。。但现在,添加您所说的I get en错误消息:“RHS的类型('integer')必须与LHS('double')匹配。在最快的情况下,检查和强制将对性能产生太大的影响。请更改目标列的类型,或强制RHS为:=您自己(例如,使用1L而不是1)”@Paco清除该列(其中当前有十进制值)dt1[,rank:=NULL]
并重试。(不能更改by=表达式中列的类型。)
dt1[, rank := frank(date, ties.method = "min"), by = list(id)]