我们已经详细讨论了分配名称存储在字符向量中的列集,但我似乎无法找到检索列并对其进行操作的解决方案。
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
答案 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
DT[, do.call(paste, mget(cols))]