【发布时间】:2014-01-04 10:21:10
【问题描述】:
只是想知道是否有一种更巧妙的方法来对 data.table 进行子集化。基本上我有一张有百万行和数百列的大桌子。我想根据一个整数 col/s 对它进行子集化,该整数 col/s 的值介于我定义的范围之间。
我想知道是否将相关列设置为键,这将是二进制搜索,但不确定我是否可以找到一系列值之间的行。
下面的人为示例。
> n = 1e7
> dt <- data.table(a=rnorm(n),b=sample(letters,replace=T,n))
> system.time(subset(dt, a > 1 & a < 2))
user system elapsed
1.596 0.000 1.596
> system.time(dt[a %between% c(1,2)])
user system elapsed
1.168 0.000 1.168
这样的事情可以做吗?
setkey(dt,a)
dt[ ] : get me the rows between 1 and 2 values of the key
谢谢! -阿比
【问题讨论】:
-
between不会节省任何时间,因为它包含代码x >= lower & x <= upper。dt[a > 1 & a < 2]会一样快 -
如何使用设置密钥?我刚刚更新了我的问题,不确定我是否可以对某个键进行范围搜索。
标签: r dataframe data.table