私は次のdata.table(DT)を持っています:
DT <- data.table(V1 = 1:3, V2 = 4:6, V3 = 7:9)
関連する変数名が格納されているオブジェクトを使用して、プログラムで(動的に)変数のサブセットを選択したいと思います。たとえば、変数「keep」に格納されている2つの列「V1」と「V3」を選択したいとします。
keep <- c("V1", "V3")
Data.frameから「keep」列を選択すると、次のように機能します。
DT[keep]
残念ながら、これがdata.tableの場合、これは機能しません。 data.frameとdata.tableはこの種の動作と同じだと思いましたが、明らかにそうではありません。正しい構文についてアドバイスできる人はいますか?
これについては FAQ 1.1、1.2、2.17 で説明されています。
いくつかの可能性:
_DT[, keep, with = FALSE]
DT[, c('V1', 'V3'), with = FALSE]
DT[, c(1, 3), with = FALSE]
DT[, list(V1, V3)]
_
DF[c('V1','V3')]
が_data.frame
_の場合と同じように機能する理由は、_?`[.data.frame`
_で説明されています。
データフレームには、いくつかのモードでインデックスを付けることができます。 _
[
_および_[[
_が単一のベクトルインデックス(_x[i]
_または_x[[i]]
_)で使用される場合、それらはデータフレームをリストであるかのようにインデックス付けします。この使用法では、drop
引数は無視され、警告が表示されます。
_data.table 1.10.2
_ から、プログラムで列をサブセット化するときに_..
_プレフィックスを使用できます。
j
が_..
_で始まるシンボルである場合、それは呼び出しスコープで検索され、その値は列名または数値と見なされます[...]これは実験的なものです。
したがって:
_DT[ , ..keep]
# V1 V3
# 1: 1 7
# 2: 2 8
# 3: 3 9
_