2013-02-21 15 views
8

Supponiamo che io sono un data.table R:colonne Accesso in data.table utilizzando un vettore carattere di nomi di colonne

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

e ho un carattere vettoriale di nomi di colonna che vorrei estrarre, o più generalmente operano su:

cols = c("x","y") 

ad esempio, come posso utilizzare colli per generare l'equivalente di

DT[,lapply(.SD[,list(x,y)], min) ] 

C'è un modo per specificare la lista (x, y) usando il vettore cols?

+0

Simile a: http://stackoverflow.com/questions/14937165/using-dynamic-column -names-in-data-table –

risposta

7

È possibile utilizzare i opzionali with = FALSE:

> all.equal(DT[,list(x,y)], DT[, cols, with = FALSE]) 
[1] TRUE 
> all.equal(DT[,.SD[,list(x,y)][min(v)]], DT[,.SD[,cols, with = FALSE][min(v)]]) 
[1] TRUE 

Maggiori dettagli nella sezione Domande frequenti 1.6 Credo: http://datatable.r-forge.r-project.org/datatable-faq.pdf

+0

Grazie! Ho cambiato la mia domanda un po 'mentre stavi rispondendo, ma la soluzione sembra ancora buona. – DavidR

+0

L'utilizzo di con = FALSE all'interno di una .SD sembra un utile idioma. Se questo è un approccio consigliato per data.table, mi chiedo se dovrebbe essere in data.table o esempi o FAQ? @MatthewDowle – DavidR

+1

@DavidR Forse '.SDcols'? Vedi? Data.table e cerca questo tag per "SDcols". –

Problemi correlati