根据逻辑向量选择data.table中的列

EDC*_*EDC 12 r logical-operators data.table

假设我有以下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)
Run Code Online (Sandbox Code Playgroud)

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

DF[,c(TRUE,TRUE,FALSE)]
Run Code Online (Sandbox Code Playgroud)

结果是:

  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
Run Code Online (Sandbox Code Playgroud)

然而

DT[,c(TRUE,TRUE,FALSE)]
Run Code Online (Sandbox Code Playgroud)

导致:

[1]  TRUE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

怎么做到呢?

akr*_*run 13

我们需要 with=FALSE

DT[, c(TRUE, TRUE, FALSE), with=FALSE]
Run Code Online (Sandbox Code Playgroud)

根据中的文档 ?data.table

默认情况下,= TRUE,j在x的帧内计算; 列名可以用作变量.当with = FALSE时,j是列名的字符向量或要选择的列位置的数字向量,返回的值始终是data.table.with = FALSE在data.table中通常很有用,可以动态选择列.

  • 我正在使用 2021 年 5 月 18 日安装的 4.1.0,但我仍然需要 `with=F` (2认同)