过滤data.table for!is.na()

时间:2015-03-29 14:08:28

标签: r data.table

据我所知,应该避免使用"&"和" |"在我避免矢量扫描。因此:

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)]

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