从data.table中检索动态列集

时间:2016-12-14 17:32:06

标签: r data.table

我们已经详细讨论了分配名称存储在字符向量中的列集,但我似乎无法找到检索列并对其进行操作的解决方案。

cols = c("x", "y")
DT = data.table(x = 10:15, y = 20:25)

> DT
    x  y
1: 10 20
2: 11 21
3: 12 22
4: 13 23
5: 14 24
6: 15 25

所需输出

> DT[,paste(x,y)]

[1] "10 20" "11 21" "12 22" "13 23" "14 24" "15 25"

我的目标是根据cols中的列为每行获取唯一标识符。我可以通过对列名进行硬编码来实现这一点,但我更愿意引用cols

以下是我尝试过的一些语法及其输出。

获取()

> DT[,get(cols)]

[1] 10 11 12 13 14 15

括号

> DT[,(cols)]

[1] "x" "y"

列表

> DT[,as.list(cols)]
   V1 V2
1:  x  y

使用= F

> DT[,cols, with=F]

    x  y
1: 10 20
2: 11 21
3: 12 22
4: 13 23
5: 14 24
6: 15 25

这有效,但我无法对列进行操作:

> DT[,paste(cols), with=F]

    x  y
1: 10 20
2: 11 21
3: 12 22
4: 13 23
5: 14 24
6: 15 25

1 个答案:

答案 0 :(得分:5)

我们可以在Data.table(paste)的子集上使用do.call.SD

DT[, do.call(paste, .SD)]
#[1] "10 20" "11 21" "12 22" "13 23" "14 24" "15 25"

如果需要对列的子集进行此操作,请在.SDcols中指定这些列,然后执行上述操作

DT[, do.call(paste, .SD), .SDcols = cols]
#[1] "10 20" "11 21" "12 22" "13 23" "14 24" "15 25"

或者使用mget

修改OP的解决方案
DT[, do.call(paste, mget(cols))]