2013-02-21 65 views
8

假設我具有R data.table:訪問列

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

,我有列名的字符向量,我想提取,或更通常操作於:

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

例如,我怎樣才能使用的cols生成相當於

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

有沒有辦法使用cols向量來指定列表(x,y)?

+0

類似:http://stackoverflow.com/questions/14937165/using-dynamic-column -names-in-data-table – 2013-02-21 18:47:14

回答

7

您可以使用可選的with = FALSE:在FAQ 1.6

> 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 

更多細節,我相信:http://datatable.r-forge.r-project.org/datatable-faq.pdf

+0

謝謝!當你回答時,我改變了一些問題,但解決方案看起來還是不錯的。 – DavidR 2013-02-21 17:11:03

+0

在.SD中使用with = FALSE似乎是一個有用的習慣用法。如果這是data.table的推薦方法,我想知道它是否應該在data.table或示例或FAQ中? @MatthewDowle – DavidR 2013-02-21 17:43:00

+1

@DavidR也許'.SDcols'?請參閱?data.table並在「SDcols」中搜索此標籤。 – 2013-02-21 18:12:59