2013-02-21 12 views
8

Załóżmy mam data.table R:Dostęp do kolumny data.table stosując wektor znaków nazwy kolumn

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

i mam wektor znaków nazwy kolumn, które chciałbym, aby wyodrębnić lub więcej generalnie działają na:

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

na przykład, jak można używać do generowania cols równowartość

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

Czy istnieje sposób określenia listy (x, y) za pomocą wektora cols?

+0

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

Odpowiedz

7

Można użyć opcjonalnego 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 

Bardziej szczegółowe informacje w FAQ 1.6 wierzę: http://datatable.r-forge.r-project.org/datatable-faq.pdf

+0

Dzięki! Zmieniłem trochę moje pytanie, podczas gdy ty odpowiadałeś, ale rozwiązanie wciąż wydaje się dobre. – DavidR

+0

Używanie with = FALSE wewnątrz .SD wydaje się przydatnym idiomem. Jeśli jest to zalecane podejście dla data.table, zastanawiam się, czy powinno to być w data.table lub przykłady lub FAQ? @MatthewDowle – DavidR

+1

@DavidR Może ".SDcols"? Zobacz? Data.table i wyszukaj ten tag dla "SDcols". –

Powiązane problemy