1. ホーム
  2. r

[解決済み] data.tableから列を位置ごとにベクトルとして取り出す

2023-06-10 23:55:43

質問

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