web-dev-qa-db-fra.com

Extraire une colonne de data.table en tant que vecteur, par position

Comment extraire une colonne de data.table en tant que vecteur par sa position? Voici quelques extraits de code que j'ai essayés:

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

Je veux obtenir cette sortie en utilisant la position de la colonne

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

Autre moyen d'obtenir cette sortie en utilisant la position de la colonne

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

Cela ne donne pas un vecteur

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

Ces deux ne fonctionnent pas:

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

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

Et cela ne donne pas un vecteur:

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

Une data.table hérite de la classe data.frame. Par conséquent, il s’agit d’un list (de vecteurs colonne) en interne et peut être traité comme tel.

is.list(DT)
#[1] TRUE

Heureusement, le sous-ensemble de liste, c'est-à-dire [[, est très rapide et, contrairement à [, le package data.table ne définit pas de méthode pour cela. Ainsi, vous pouvez simplement utiliser [[ extraire par un index:

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

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

où colNb peut être un entier (le numéro de colonne souhaité) ou une variable contenant le numéro de colonne.

3
lokxs