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
Data.tableはクラスdata.frame
を継承します。したがって、内部的には(列ベクトルの)list
であり、そのように扱うことができます。
is.list(DT)
#[1] TRUE
幸いなことに、リストのサブセット、つまり[[
は非常に高速であり、[
とは対照的に、パッケージdata.tableはそのメソッドを定義しません。したがって、単に[[
を使用して、インデックスで抽出できます。
DT[[2]]
#[1] 3 4
DT[,get(names(DT)[colNb])]
ここで、colNbは整数(目的の列番号)または列番号を含む変数です。