【发布时间】:2014-06-17 23:18:41
【问题描述】:
将字符向量和列名作为列列表传递给data.table?
我希望能够在 R 中使用 data.table 生成列的子集,这样我可以更早地确定其中的一些列并将预定列表作为字符向量传递,然后与静态列表相结合列。
也就是说,鉴于此:
a <- 1:4
b <- 5:8
c <- c('aa','bb','cc','dd')
e <- 1:4
z <- data.table(a,b,c,e)
我想这样做:
z[, list(a,b)]
产生这个输出:
a b
1: 1 5
2: 2 6
3: 3 7
4: 4 8
但我想以与此类似的方式来做这件事(几乎可以):
cols <- "b"
z[, list(get(cols), a)]
结果:
请注意,它不会返回存储在cols 中的列的名称
V1 a
1: 5 1
2: 6 2
3: 7 3
4: 8 4
但我需要使用多个cols 的元素(这不起作用):
cols <- c('a', 'b')
z[, list(mget(cols), c)]
以上产生以下错误:
Error: value for ‘a’ not found
我认为我的问题在于范围界定以及 mget 正在查看哪些环境,但我无法弄清楚我到底做错了什么。另外,如何保留列标题?
【问题讨论】:
-
z[,c(cols,'c'),with=FALSE]够吗?我猜这可能是重复的。 -
@thelatemail - 这在我的示例和我自己的代码中运行良好。 'with=FALSE' 很有趣。我不认为我理解在 x 的框架内评估 j (with=TRUE)和让 j 是要选择的名称或位置的向量(with=FALSE)之间的区别。我需要进一步研究以了解所有已给出的答案。
标签: r data.table