从data.table中检索动态列集

nat*_*ate 3 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
Run Code Online (Sandbox Code Playgroud)

期望的输出

> DT[,paste(x,y)]

[1] "10 20" "11 21" "12 22" "13 23" "14 24" "15 25"
Run Code Online (Sandbox Code Playgroud)

我的目标是根据列中的每列获取唯一标识符cols.我可以通过硬编码列名来做到这一点,但我宁愿参考cols


这是我尝试过的一些语法及其输出.

得到()

> DT[,get(cols)]

[1] 10 11 12 13 14 15
Run Code Online (Sandbox Code Playgroud)

括弧

> DT[,(cols)]

[1] "x" "y"
Run Code Online (Sandbox Code Playgroud)

名单

> DT[,as.list(cols)]
   V1 V2
1:  x  y
Run Code Online (Sandbox Code Playgroud)

与= 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
Run Code Online (Sandbox Code Playgroud)

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

> 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
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

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

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

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

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

或者使用OP的解决方案的修改 mget

DT[, do.call(paste, mget(cols))]
Run Code Online (Sandbox Code Playgroud)