是否有一种最佳方法可以使用 data.table 创建一堆新列?

gdo*_*dol 4 r data.table

我正在使用 data.table 我有一个新列的名称向量。我想创建这些新列,但使用旧列中的信息。让我在下面的例子中展示它:

data <- data.table(a = c("OneA", "TwoB", "ThreeC"),
                   b = c(1, 2, 3))

newCols <- c("One", "Two", "Three")

for (newCol in newCols) {
  data[, eval(newCol) := gsub(paste0("^.*", newCol), "", a)]
}
Run Code Online (Sandbox Code Playgroud)

作为输出,我期望(并得到)以下内容:

> data
        a   b    One    Two Three
1:   OneA   1      A   OneA  OneA
2:   TwoB   2   TwoB      B  TwoB
3: ThreeC   3 ThreeC ThreeC     C
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我结合从向量定义新列并使用向量值本身来填充这些列。有没有办法做得更优化(例如使用 set())?

Jor*_*hau 6

一种可能的方法是:

library(data.table)

DT[, (newCols) := lapply(newCols, function(x) sub(x, "", a))][]
#>         a b    One    Two Three
#> 1:   OneA 1      A   OneA  OneA
#> 2:   TwoB 2   TwoB      B  TwoB
#> 3: ThreeC 3 ThreeC ThreeC     C
Run Code Online (Sandbox Code Playgroud)

数据

DT <- data.table(a = c("OneA", "TwoB", "ThreeC"), b = c(1, 2, 3))
newCols <- c("One", "Two", "Three")
Run Code Online (Sandbox Code Playgroud)