将多个列名传递给data.table中的j的正式方法是什么?

时间:2018-06-19 15:57:50

标签: r data.table

我敢肯定,我之前已经解决了这个问题,并在网上找到了一个或两个hack,但是在暂时不使用data.table之后,现在无法正确完成它。所以我想知道:对于像这样的用例,传递多个列名称的确切解决方案是什么:

library(data.table)
data(mtcars)
dt <- data.table(mtcars)
cols <-  c("mpg","cyl","qsec")

dt[,key := paste('prefix',
             get(cols[1]),
             get(cols[2]),
             get(cols[3]),
             sep = ".")]

如何在不显式提及所有列的情况下完成粘贴。 显然,将cols向量简单地传递到get会很棒。但是,这仅指第一个参数,其余参数则被忽略。 我记得@MattDowle指出我不要在我的旧软件包中使用eval(as.name()),因为我认为这也不是正确的解决方案...

1 个答案:

答案 0 :(得分:1)

在这种情况下,我们可以在.SDcols中指定它,并将do.callpaste一起使用

dt[, key := do.call(paste, c('prefix', .SD, sep=".")), .SDcols = cols]

或者使用.SDcols

时遇到问题
dt[, key := do.call(paste, c('prefix', mget(cols), sep="."))]