如何在 data.table 中以编程方式选择列?

2024-01-11

我有以下数据表(DT):

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

我想通过使用存储相关变量名称的对象以编程方式(动态)选择变量的子集。例如,我想选择存储在变量“keep”中的两列“V1”和“V3”

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

如果我们要从 data.frame 中选择“保留”列,则以下操作将起作用:

DT[keep]

不幸的是,当这是一个 data.table 时,这不起作用。我认为 data.frame 和 data.table 与这种行为相同,但显然它们不是。有人可以建议正确的语法吗?


这涵盖在常见问题解答 1.1、1.2 和 2.17 https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-faq.html.

一些可能性:

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

原因DF[c('V1','V3')]其工作方式与data.frame被覆盖在?`[.data.frame`

数据帧可以通过多种模式进行索引。什么时候[ and [[被使用 具有单个向量索引(x[i] or x[[i]]),他们索引数据框 就好像它是一个列表。在这种用法中drop参数被忽略,带有 警告。


From data.table 1.10.2 https://github.com/Rdatatable/data.table/blob/master/NEWS.md#changes-in-v1102--on-cran-31-jan-2017,您可以使用..以编程方式对列进行子集化时的前缀:

When j是一个前缀为的符号..它将在调用范围中查找,其值被视为列名称或数字[...]它是实验性的。

Thus:

DT[ , ..keep]
#    V1 V3
# 1:  1  7
# 2:  2  8
# 3:  3  9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 data.table 中以编程方式选择列? 的相关文章

随机推荐