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中通常很有用,可以动态选择列.