r语言 - 基于键的子集 data.table 不是列表的元素



我有以下数据表:

DT = data.table(ID = c(1, 2, 4, 5, 10), A = c(13, 1, 13, 11, 12))
DT
ID  A
1:  1 13
2:  2  1
3:  4 13
4:  5 11
5: 10 12

列 A 的内容并不重要。我有一个列表/向量test <- c(1, 5, 9, 10, 11, 12, ...),它可以比 data.table 长很多倍。我想选择 data.table 中的行DT以便向量test中不存在键ID

ID  A
2:  2  1
3:  4 13

我认为DT[!(ID %in% test)]有效,但想利用 data.table 快速基于键的子集。请注意,向量test可能与DT中的键没有任何共同的元素,这将导致子集返回 data.table 本身,并且可能是所有键都存在于test中,返回一个空的 data.table。有什么建议吗?

怎么样:

library(data.table)
DT   <- data.table(ID = c(1, 2, 4, 5, 10), A = c(13, 1, 13, 11, 12))
test <- data.table(ID = c(1, 5, 9, 10, 11, 12))
setkey(test,ID)
DT[!test, on="ID"]

我们可以使用%in%和 否定 (!(

DT[!ID %in% test]

最新更新