2013-04-25 14 views
9

Ho il seguente data.table (DT):Come selezionare le colonne a livello di codice in un data.table?

DT <- data.table(V1 = 1:3, V2 = 4:6, V3 = 7:9) 

Vorrei selezionare un sottoinsieme delle variabili di programmazione (dinamico), utilizzando un oggetto in cui sono memorizzati i nomi delle variabili rilevanti. Per esempio, ho voglia di selezionare le due colonne "V1" e "V3" memorizzati in una variabile di "tenere"

keep <- c("V1", "V3") 

Se dovessimo scegliere il "tenere" colonne da una data.frame, il seguente sarebbe lavoro:

DT[keep] 

Sfortunatamente, questo non funziona quando si tratta di un file data.table. Ho pensato che data.frame e data.table siano identici a questo tipo di comportamento, ma in realtà non lo sono. Qualcuno in grado di consigliare la sintassi corretta?

risposta

14

Trattasi di FAQ 1.1, 1.2 and 2.17.

Alcune possibilità:

DT[, c('V1','V3'), with = FALSE] 
DT[, c(1,3), with = FALSE] 
DT[, list(V1,V3)] 

Il motivo DF[c('V1','V3')] opere come fa per un data.frame è coperto in ?`[.data.frame`

cornici dati possono essere indicizzati in diverse modalità. Quando [ e [[ vengono utilizzati con un indice vettoriale singolo (x[i] o), indicizzano il riquadro dati come se fosse un elenco. In questo utilizzo un argomento drop viene ignorato, con un avviso .


Da data.table 1.10.2, è possibile utilizzare il prefisso .. quando sottoinsiemi colonne di programmazione:

Quando j è un simbolo con prefisso .. sarà guardato in ambito chiamare e il suo valore portato a essere nomi di colonne o numeri [...] È sperimentale.

Così:

DT[ , ..keep] 
# V1 V3 
# 1: 1 7 
# 2: 2 8 
# 3: 3 9 
Problemi correlati