【问题标题】:Select columns in data.table based on logical vector根据逻辑向量选择 data.table 中的列
【发布时间】:2016-01-22 23:08:23
【问题描述】:

假设我有以下 data.frame 和以下 data.table:

DF = data.frame(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)

使用 data.frame,我可以根据逻辑向量选择列,如下所示:

DF[,c(TRUE,TRUE,FALSE)]

结果是:

  x y
1 a 1
2 a 3
3 a 6
4 b 1
5 b 3
6 b 6
7 c 1
8 c 3
9 c 6

然而

DT[,c(TRUE,TRUE,FALSE)]

导致:

[1]  TRUE  TRUE FALSE

怎么做?

【问题讨论】:

    标签: r data.table logical-operators


    【解决方案1】:

    2020 年 4 月 22 日更新

    data.table 的当前 CRAN 版本中,DT[ , c(TRUE, TRUE, FALSE)] 可以工作——不需要with=FALSE。将这个较旧的答案留给后代:


    我们需要with=FALSE

    DT[, c(TRUE, TRUE, FALSE), with=FALSE]
    

    基于?data.table中的文档

    默认情况下 with=TRUE 并且 j 在 x 的框架内计算;柱子 名称可以用作变量。当 with=FALSE j 是一个字符 列名的向量或列位置的数值向量 select,返回的值始终是data.table。 with=FALSE 是 通常在 data.table 中用于动态选择列。

    【讨论】:

    • 啊,我明白了,感谢您引用文档中的解释。
    • 对不起,也只是一点点 q:如果我想将这些列设置为某个值,例如NA,最好的方法是什么?还是我应该做一个新的q?
    • @user3032689 如果要将前两列设置为NA,有不同的方法,一个紧凑的是DT[, (1:2) := NA]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多