Joc*_*hem 13 r dataframe data.table
我有以下data.table(DT):
DT <- data.table(V1 = 1:3, V2 = 4:6, V3 = 7:9)
Run Code Online (Sandbox Code Playgroud)
我想通过使用存储相关变量名称的对象以编程方式(动态)选择变量的子集.例如,我想选择存储在变量"keep"中的两列"V1"和"V3"
keep <- c("V1", "V3")
Run Code Online (Sandbox Code Playgroud)
如果我们从data.frame中选择"保留"列,则以下内容将起作用:
DT[keep]
Run Code Online (Sandbox Code Playgroud)
不幸的是,当这是data.table时,这不起作用.我认为data.frame和data.table与这种行为相同,但显然它们不是.有人能提供正确的语法建议吗?
mne*_*nel 22
这包含在FAQ 1.1,1.2和2.17中.
一些可能性:
DT[, keep, with = FALSE]
DT[, c('V1', 'V3'), with = FALSE]
DT[, c(1, 3), with = FALSE]
DT[, list(V1, V3)]
Run Code Online (Sandbox Code Playgroud)
究其原因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
Run Code Online (Sandbox Code Playgroud)