在 data.table 中结合向量和二进制搜索
Combining vector and binary search in data.table
有时,我有一个带键的 data.table
,我想根据它的键 和 一个未带键的列进行子集化。 simplest/fastest 的方法是什么?
感觉最自然的是错误:
dt <- data.table(id = 1:100, var = rnorm(100), key = "id")
dt[.(seq(1, 100, 2)) & var > 0, ]
下一个最干净的事情是链接:
dt[.(seq(1, 100, 2))][var > 0, ]
当然我们完全可以放弃使用二进制搜索(我认为这显然是要避免的):
dt[id %in% seq(1, 100, 2) & var > 0, ]
有没有我缺少的方法?另外,第一个是错误的任何特定原因?语法对我来说似乎很清楚。
在撰写本文时,本机方法:
dt[.(seq(1, 100, 2)) & var > 0, j] #some expression j
如下:
dt[.(seq(1, 100, 2)), .SD[var > 0, j]]
我使用 data.table
的次数越多,这就越自然,但看起来还是有点不直观。 C'est la vie.
有时,我有一个带键的 data.table
,我想根据它的键 和 一个未带键的列进行子集化。 simplest/fastest 的方法是什么?
感觉最自然的是错误:
dt <- data.table(id = 1:100, var = rnorm(100), key = "id")
dt[.(seq(1, 100, 2)) & var > 0, ]
下一个最干净的事情是链接:
dt[.(seq(1, 100, 2))][var > 0, ]
当然我们完全可以放弃使用二进制搜索(我认为这显然是要避免的):
dt[id %in% seq(1, 100, 2) & var > 0, ]
有没有我缺少的方法?另外,第一个是错误的任何特定原因?语法对我来说似乎很清楚。
在撰写本文时,本机方法:
dt[.(seq(1, 100, 2)) & var > 0, j] #some expression j
如下:
dt[.(seq(1, 100, 2)), .SD[var > 0, j]]
我使用 data.table
的次数越多,这就越自然,但看起来还是有点不直观。 C'est la vie.