web-dev-qa-db-ja.com

論理ベクトルに基づいて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)

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

どうすればそれができますか?

13
EDC

with=FALSEが必要です

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

?data.tableのドキュメントに基づく

デフォルトでは、with = TRUEであり、jはxのフレーム内で評価されます。列名は変数として使用できます。 with = FALSEの場合、jは選択する列名の文字ベクトルまたは列位置の数値ベクトルであり、返される値は常にdata.tableです。 with = FALSEは、data.tableで列を動的に選択するのに役立つことがよくあります。

12
akrun