【问题标题】:subset data.table based on key being NOT an element of a list子集 data.table 基于键不是列表的元素
【发布时间】:2020-06-06 16:45:05
【问题描述】:

我有以下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。有什么建议吗?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    怎么样:

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

    【讨论】:

      【解决方案2】:

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

      DT[!ID %in% test]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-04
        • 1970-01-01
        • 2019-09-07
        • 2011-10-19
        • 2020-04-16
        相关资源
        最近更新 更多