Wie extrahiere ich eine Spalte aus einer Datentabelle als Vektor anhand ihrer Position? Im Folgenden sind einige Codefragmente aufgeführt, die ich ausprobiert habe:
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
Ich möchte diese Ausgabe über die Spaltenposition erhalten
DT$y
#[1] 3 4
is.vector(DT$y)
#[1] TRUE
Andere Möglichkeit, diese Ausgabe über die Spaltenposition abzurufen
DT[,y]
#[1] 3 4
is.vector(DT[,y])
#[1] TRUE
Dies gibt keinen Vektor
DT[,2,with=FALSE]
# y
#1: 3
#2: 4
is.vector(DT[,2,with=FALSE])
#[1] FALSE
Diese beiden funktionieren nicht:
DT$noquote(names(DT)[2]) # Doesn't work
#Error: attempt to apply non-function
DT[,noquote(names(DT)[2])] # Doesn't work
#[1] y
Und das gibt keinen Vektor:
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
r
vector
indexing
data.table
Nasse Füße
quelle
quelle
Antworten:
Eine data.table erbt von der Klasse
data.frame
. Daher ist eslist
intern ein (von Spaltenvektoren) und kann als solches behandelt werden.is.list(DT) #[1] TRUE
Glücklicherweise ist die Listenuntermenge
[[
sehr schnell, und im Gegensatz zu[
package data.table wird keine Methode dafür definiert. Sie können also einfach verwenden[[
, um nach einem Index zu extrahieren:DT[[2]] #[1] 3 4
quelle
DT[,get(names(DT)[colNb])]
Dabei kann colNb eine Ganzzahl (die gewünschte Spaltennummer) oder eine Variable sein, die die Spaltennummer enthält.
quelle