Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使您的排名值在R data.table中显示整数(无小数)_R_Data.table_Ranking - Fatal编程技术网

如何使您的排名值在R data.table中显示整数(无小数)

如何使您的排名值在R data.table中显示整数(无小数),r,data.table,ranking,R,Data.table,Ranking,我必须对一个数据集进行排序,该数据集由几个变量排序,并由其中的另一个变量分组。当我在data.table上使用排名方法时,排名值是小数。我需要它们是不带小数点的整数 贝娄,我提供了一个我需要的摘要。我从这个网站上的另一个问题中复制了其他人的例子(也与排名方法有关)。我发现这个问题的答案很有用,但它仍然不能提供使排名结果成为不带小数的整数的方法。这就是为什么我把它复制到这里,并把它作为这个问题的起点(因为在一个答案下不允许问不同的问题) 我需要根据几个变量进行排名,按一个(或几个变量)分组,然后得

我必须对一个数据集进行排序,该数据集由几个变量排序,并由其中的另一个变量分组。当我在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)]