在data.table中嵌入聚合函数时,case_when较慢

时间:2018-10-24 13:29:46

标签: r data.table

我正在使用data.table来处理具有很多行的数据,但是当我尝试通过聚合函数使用case_w时,我看到了明显的减速。我发现我可以做2个不同的data.table步骤,首先使用case_when语句创建一个新列,然后进行聚合该变量的第二步,并且执行速度非常快,但是我并不总是想要创建初始data.table步骤中的变量。是否有更好的方法将“ case_when”类型语句与聚合data.table步骤一起使用?

以下是可重现的示例:

library(dplyr)
library(data.table)

df <- data.table('id' = 1:283408,
                 'year' = 2018,
                 'qtr' = sample(x = 1:4,283408,TRUE),
                 'var1' = sample(x = 1:12,size = 283408,TRUE))


##### This approach takes me 66 seconds
start <- proc.time()
df2 = df[,
         list(var2 = max(case_when(var1 <= 3 ~ 3,
                                   var1 <= 6 ~ 6,
                                   var1 <= 9 ~ 9,
                                   TRUE ~ 12))),
         by = list(id,year,qtr)]
proc.time() - start

##### This approach takes .11 seconds
start <- proc.time()
df[,var2 := case_when(var1 <= 3 ~ 3,
                      var1 <= 6 ~ 6,
                      var1 <= 9 ~ 9,
                      TRUE ~ 12)]
df2 = df[,
         list(var2 = max(var2)),
         by = list(id,year,qtr)]
proc.time() - start

0 个答案:

没有答案