我有一个包含start_date
和end_date
的数据表。现在我们在2010-01-05,我想过滤这个表,这样,我只返回包含我的日期的行。我知道这可以通过矢量扫描轻松完成:
library(data.table)
dt <- data.table(start_date=20100101:20100120, end_date=20100105:20100124, value= 1:20)
dt[start_date <= 20100105 & end_date >20100105, ]
这会产生:
dt[start_date <= 20100105 & end_date >20100105, ]
start_date end_date value
1: 20100102 20100106 2
2: 20100103 20100107 3
3: 20100104 20100108 4
4: 20100105 20100109 5
然而,对于非常大的表(20-50百万行),这将是低效的。我知道如果表是键控的,我可以通过编写dt[.(20100102, 20100106), ]
来使用data.table的二进制搜索工具来选择某个日期。但是我如何利用二进制搜索,以便我可以扫描上述练习中的范围。