2013-04-25 93 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 
相关问题