我有一组数据,我需要添加多个额外的列来对现有数据进行排名。我是通过一次添加一个额外的列来做到这一点的,但我希望通过将列作为字符向量传入来获得更有效的方法?这是一个简单的例子:

require(data.table)
dt <- data.table(x = rnorm(10),
                 y = rnorm(10))

dt[, ":=" (rank_x = rank(x, ties.method = "min"),
           rank_y = rank(y, ties.method = "min"))]

排名方法在所有情况下都是相同的,所以我希望使用类似的方法
cols <- c("x", "y")

dt[, cols := lapply(.SD, function(x) rank(x, ties.method = "min")), .SDcols = cols]

最佳答案

我们可以使用 paste 来创建新变量

dt[, paste0("rank_", cols) := lapply(.SD, rank, ties.method = "min"), .SDcols = cols]

关于r - 向数据表添加多个新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44840508/

10-12 17:32