基于不等式在子集中利用data.table的二进制搜索功能

时间:2017-08-16 18:20:23

标签: r data.table

我希望利用data.table的快速二进制搜索功能以两种方式对data.table进行子集化。首先,我想从原始数据表中只消除一组值。其次,我只想保留满足不平等标准的记录。对于(一个非常简单的)示例,请说您有以下内容:

library(data.table)
dt <- data.table(letter = rep(c('',letters[1:4]), each = 4),
                 date = as.IDate(c('2014-09-29','2014-09-30','2014-10-01','2014-10-02')))

在结果中,我想要一个data.table,它排除字母为空白且日期早于2014年10月1日的条目。在这种情况下:

   letter       date
1:      a 2014-09-29
2:      a 2014-09-30
3:      b 2014-09-29
4:      b 2014-09-30
5:      c 2014-09-29
6:      c 2014-09-30
7:      d 2014-09-29
8:      d 2014-09-30

我知道有很多种方法可以使用各种各样的软件包来满足这一要求,而data.table中的(旧的)方法将是这样的:

dt[letter != '' & date < '2014-10-01',]

但是,我不相信这会使用快速二进制搜索功能。不幸的是,速度和普遍性在这里是必不可少的,因为我工作的数据集通常有3亿或更多行,面板是不平衡的,截止日期也会改变。我意识到已经提出并回答了几个类似的问题,但是由于非equi连接在data.table v1.9.7中发布,因此似乎没有解决子集(即非连接)问题。我希望这个新功能也允许使用非equi子集。

- 编辑 -

感谢您提供有用的评论。我的问题是,&#34;有没有办法创建这个利用data.table的二进制搜索功能的子集?&#34;

0 个答案:

没有答案