r - 如何将列列表传递给 data.table,其中一些是预先确定的

标签 r data.table

将字符向量和列名传递给 data.table作为列列表?
我希望能够使用 data.table 在 R 中生成列的子集,以便我可以更早地确定其中一些列并将预定列表作为字符向量传递,然后与列的静态列表组合。
也就是说,鉴于此:

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正在查看,但我无法弄清楚我到底做错了什么。另外,如何保留列标题?

最佳答案

这里有两个(几乎等价的)选项。一个使用 lapply :

z[, c(lapply(cols, get), list(c))]
#   V1 V2 V3
#1:  1  5 aa
#2:  2  6 bb
#3:  3  7 cc
#4:  4  8 dd

还有一个使用 mget :
z[, c(mget(cols, inherits = TRUE), c = list(c))]
#   a b  c
#1: 1 5 aa
#2: 2 6 bb
#3: 3 7 cc
#4: 4 8 dd

请注意 get返回一个丢失列名信息的向量(除了手动将其重新添加之外,您无能为力),而 mget返回一个命名列表。

关于r - 如何将列列表传递给 data.table,其中一些是预先确定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24274815/

相关文章:

R 行表示按组(或唯一 ID)在多列上

r - dplyr分组依据,将值从上一个分组结转到下一个

r - 计算R中每分钟的平均值

R最快速的方式条件选择

shell - 如何从 R 或/和 Matlab 运行 shell 脚本?

R Predict() 要求排除在 lm() 回归模型中的变量

r - 什么时候建议在 R 中使用稀疏矩阵?

r - 在 R 中使用 data.table,如何排除行以及如何在整数列中包含 NA 值

r - 对每行包含多个因子的数据帧进行一次热编码

r - 如何在 R 中连接复合语言对象?