我有一个问题,我需要将2列分成几百万次。因此,我希望优化子设置的时间。
我看到即使矢量扫描是按照data.table小插图https://cran.r-project.org/web/packages/data.table/vignettes/datatable-keys-fast-subset.html进行矢量扫描
已自动优化以使用二进制搜索
按照键控子集的意图进行显式写入仍然更快。
library(data.table)
flights <- fread("flights14.txt") # From the "Introduction to data.table Vignette"
setkey(flights, origin, dest)
system.time({for(i in 1:5000) flights[.("JFK", "MIA")]})
system.time({for(i in 1:5000) flights[origin == "JFK" & dest == "MIA"]})
system.time({for(i in 1:5000) flights[origin %chin% "JFK" & dest %chin% "MIA"]})
user system elapsed
268.689 5.203 8.767
user system elapsed
200.481 6.370 6.489
user system elapsed
261.194 3.981 8.518
我的想法是重写以下代码,以便对其进行优化(我的搜索向量中的元素数量是可变的)。
flights[origin %chin% c("JFK", "EWR") & dest %chin% c("MIA", "ALB",)]
一种尝试尽可能多地使用第一个键的方法比较慢:
rbind(flights[.(c("JFK", "EWR"), "ALB"), nomatch = NULL], flights[.(c("JFK", "EWR"), "MIA"), nomatch = NULL])
有没有一种方法可以更快地完成此子集?