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
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
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.