2013-04-25 65 views
9

我有以下data.table(DT):如何以編程方式在data.table中選擇列?

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

我想選擇變量編程(動態地)的一個子集,通過使用其中的相關變量名稱存儲的對象。例如,我要選擇兩列「V1」和「V3」存儲在變量「保持」

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

如果我們選擇從data.frame「保持」欄目,下面的工作:

DT[keep] 

不幸的是,這是不工作時,這是一個data.table。我認爲data.frame和data.table與這種行爲是相同的,但顯然他們不是。任何人都可以建議正確的語法?

回答

14

這包括在FAQ 1.1, 1.2 and 2.17

一些可能性:

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

DF[c('V1','V3')]作品因爲它的data.frame的原因是覆蓋在?`[.data.frame`

數據幀可以在多種模式下進行索引。當具有單個向量索引(x[i]x[[i]])的[[[被使用時 ,它們索引數據幀 ,就好像它是列表一樣。在此用法中,drop參數會被忽略,並且會有 警告。


data.table 1.10.2,則可能子集劃分列時以編程方式使用..前綴:

j..前綴一個符號將在呼叫範圍進行查找,並採取了它的價值列名或數字[...]它是實驗性的。

因此:

DT[ , ..keep] 
# V1 V3 
# 1: 1 7 
# 2: 2 8 
# 3: 3 9 
相關問題