2015-10-23 13 views
8

Sagen wir, ich habe folgende data.frame und die folgende data.table:Spalten auswählen in data.table basierend auf logischen Vektor

DF = data.frame(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9) 
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9) 

Mit einem data.frame, ich Spalten basierend auf einer logischen auswählen Vektor wie folgt:

DF[,c(TRUE,TRUE,FALSE)] 

Das Ergebnis ist:

x y 
1 a 1 
2 a 3 
3 a 6 
4 b 1 
5 b 3 
6 b 6 
7 c 1 
8 c 3 
9 c 6 

jedoch

012.351.
DT[,c(TRUE,TRUE,FALSE)] 

führt zu:

[1] TRUE TRUE FALSE 

Wie es getan werden kann?

Antwort

9

Wir brauchen with=FALSE

DT[, c(TRUE, TRUE, FALSE), with=FALSE] 

Basierend auf der Dokumentation in ?data.table

standardmäßig mit = TRUE und j im Rahmen von x ausgewertet wird; Spalte Namen können als Variablen verwendet werden. Wenn mit = FALSE ist j ein Zeichen Vektor von Spaltennamen oder ein numerischer Vektor von Spaltenpositionen zu auswählen, und der zurückgegebene Wert ist immer eine data.table. with = FALSE ist oft in data.table nützlich, um Spalten dynamisch auszuwählen.

+1

Ahh ich sehe, danke für die Erklärung aus dem doc zitiert. – EDC

+0

@EDC Kein Problem. Ich bin froh, Ihnen zu helfen .. – akrun

+0

Entschuldigung, nur ein wenig q auch: Wenn ich diese Spalten auf einen Wert, z. 'NA', was ist der beste Weg, es zu tun? Oder sollte ich ein neues q machen? – user3032689

Verwandte Themen