分配名称存储在字符向量中的列集很好地讨论,但我似乎无法找到检索列并对其进行操作的解决方案.
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)
我们可以使用paste与do.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)