【问题标题】:filter data.table for !is.na()为 !is.na() 过滤 data.table
【发布时间】:2015-03-29 14:08:28
【问题描述】:

据我所知,应该避免使用“&”和“|”在 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)]

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    不幸的是,目前在基于二分搜索的子集中不可能有您需要的形式的表达式。也就是说,我们不能否定单个键列。

    目前执行基于二分搜索的子集的方法是:

    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

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 2019-09-02
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2022-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多