我有以下数据表:
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]