据我所知,应该避免使用"&"和" |"在我避免矢量扫描。因此:
data<-data.table(a=c(NA, 1, 2), b=c(1, 2, 1), key="a,b")
data[is.na(a) & b==1]
应替换为
data[.(NA_integer_, 1)]
但是:当我在所有非NA参赛作品中互动时,我该怎么做?可以使用以下内容,还是使用较慢的矢量扫描?
data[!is.na(a) & b==1]
因为这样的事情似乎不起作用
data[.(!NA_integer_, 1)]
答案 0 :(得分:3)
不幸的是,目前无法在基于二进制搜索的子集中使用所需格式的表达式。即,我们不能在各个键列上否定。
目前执行基于二进制搜索的子集的方法是:
require(data.table) ## v1.9.5+
a_val = setdiff(unique(data$a), NA)
setkey(data)[.(a_val, 1), nomatch=0L]
# a b
# 1: 2 1
可能很高兴有一个功能,例如,not()
或except()
允许我们在内部提取值...关注文件FR here?