为数据表筛选!is.na()的内容。

4
据我所知,在I中应避免使用"&"和"|"以避免向量扫描。因此:
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个回答

4

很遗憾,目前二分查找子集中无法使用你需要的表达式形式。也就是说,我们无法对单个关键列进行 否定

目前执行二分查找子集的方法如下:

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吗?请在这里提交。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接