2015-08-24 13 views
11

Sto provando a selezionare quelle colonne in un data.table il cui nome appare nel mio vettore di caratteri. L'operazione funziona in un puro data.frame, ma non funziona in un data.table. Ecco un esempio riproducibile.Come selezionare le colonne in data.table utilizzando un vettore di caratteri di determinati nomi di colonne?

> names(mtcars) 
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" 
[11] "carb" 
> myVector <- c('disp', 'hp', 'wt') 
> head(mtcars[, myVector]) 
        disp hp wt 
Mazda RX4   160 110 2.620 
Mazda RX4 Wag  160 110 2.875 
Datsun 710   108 93 2.320 
Hornet 4 Drive  258 110 3.215 
Hornet Sportabout 360 175 3.440 
Valiant   225 105 3.460 

Ho appena fatto un vettore che comprende disp, hp e wt e selezionate le colonne corrispondenti nel mio data.frame utilizzando tale vettore. Facciamo ora un oggetto data.table dal mio data.frame e proviamo a fare la stessa operazione.

> library(data.table) 
> mtcarsDT <- data.table(mtcars) 
> mtcarsDT[, myVector] 
[1] "disp" "hp" "wt" 

risposta

15

Possiamo usare with=FALSE a fare la stessa operazione in data.frame

mtcarsDT[, myVector, with=FALSE] 

Secondo ?data.table

con: Di default 'con = TRUE' e 'j' viene valutata all'interno del frame di 'x'; i nomi delle colonne possono essere usati come variabili. Quando 'con = FALSE' 'j' è un vettore di caratteri di nomi di colonne o un vettore numerico di posizioni di colonna da selezionare e il valore restituito è sempre un 'data.table'. 'With = FALSE' è spesso utile in 'data.table' per selezionare dinamicamente le colonne.

Problemi correlati