r - 在 data.table 中嵌入聚合函数时,case_when 很慢
问题描述
我正在使用 data.table 来处理具有大量行的数据,但是当我尝试将 case_when 与聚合函数一起使用时,我发现速度明显下降。我发现我可以执行 2 个不同的 data.table 步骤,首先使用我的 case_when 语句创建一个新列,然后执行聚合该变量的第二步,它执行得非常快,但我并不总是想创建初始 data.table 步骤中的变量。有没有更好的方法来使用带有聚合 data.table 步骤的“case_when”类型语句?
这是一个可重现的示例:
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