r语言 - 在 data.table 中将多个列名传递给 j 的官方方法是什么?



我很确定我以前解决了这个问题,并在网上发现了一两个黑客,但是在一段时间不使用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()),这被认为也不是正确的解决方案......

我们可以在.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="."))]

最新更新