web-dev-qa-db-ja.com

data.tableから位置としてベクトルとして列を抽出します

Data.tableから位置としてベクトルとして列を抽出するにはどうすればよいですか?以下は、私が試したコードスニペットです。

DT<-data.table(x=c(1,2),y=c(3,4),z=c(5,6))
DT
#   x y z
#1: 1 3 5
#2: 2 4 6

列の位置を使用してこの出力を取得したい

DT$y 
#[1] 3 4
is.vector(DT$y)
#[1] TRUE

列の位置を使用してこの出力を取得する他の方法

DT[,y] 
#[1] 3 4
is.vector(DT[,y])
#[1] TRUE

これはベクトルを与えません

DT[,2,with=FALSE]
#   y
#1: 3
#2: 4
is.vector(DT[,2,with=FALSE])
#[1] FALSE

これら2つは機能しません。

DT$noquote(names(DT)[2]) # Doesn't work
#Error: attempt to apply non-function

DT[,noquote(names(DT)[2])] # Doesn't work
#[1] y

そして、これはベクトルを与えません:

DT[,noquote(names(DT)[2]),with=FALSE] # Not a vector
#   y
#1: 3
#2: 4
is.vector(DT[,noquote(names(DT)[2]),with=FALSE])
#[1] FALSE
67
Wet Feet

Data.tableはクラスdata.frameを継承します。したがって、内部的には(列ベクトルの)listであり、そのように扱うことができます。

is.list(DT)
#[1] TRUE

幸いなことに、リストのサブセット、つまり[[は非常に高速であり、[とは対照的に、パッケージdata.tableはそのメソッドを定義しません。したがって、単に[[を使用して、インデックスで抽出できます。

DT[[2]]
#[1] 3 4
90
Roland

DT[,get(names(DT)[colNb])]

ここで、colNbは整数(目的の列番号)または列番号を含む変数です。

3
lokxs