使用R中的data.table对日期进行排名时的效率

时间:2016-07-27 15:43:07

标签: r data.table

我有访问日期和个人ID的数据:

n     <- 1e6 
set.seed(42L)
DT <- data.table(id = sample(1:37000, n, replace=TRUE),
                 date = as.Date("1963-07-13", "%Y-%m-%d")
                 - sample(1:9000, n, replace=TRUE))

我正在添加一个变量,对每个人的访问进行排名。访问#1,#2等。如果我无法区分两次访问,他们可以按任何(一致)方式排名。

在我上一次question之后(关于效率),我意识到我应该学习如何使用data.table。所以我目前的解决方案是使用data.table - 唯一的问题是该命令需要几秒钟才能运行。

> system.time(DT[, visit.n := rank(date, ties.method="first"), by = id]
+ )
   user  system elapsed 
   4.42    0.02    4.44 

我想知道我是在做“错误”的事情,还是只需要耐心等待继续前进。

1 个答案:

答案 0 :(得分:4)

取自我的评论:

正如@Frank指出的那样,setkey不是必需的。只需使用order(date)即可对日期进行排名。我还将日期保存为整数。

system.time({
  DT[, date := as.IDate(date)][order(date), visit.n := 1:.N, by=id]
}) 

   user      system     elapsed
  0.126       0.005       0.132