这是这个问题的后续问题为什么使用 := 和 tstrsplit 创建的新列在有或没有“by”参数的情况下会有所不同? https://stackoverflow.com/q/67090605/6537892.
比较这两段代码:
library(data.table)
DT <- data.table(col = c('a', 'a_b', 'a_b_c'))
DT[, c('col1', 'col2') := tstrsplit(col, '_')]
这会产生以下错误:
Error in '[.data.table'(DT, , ':='(c("col1", "col2"), tstrsplit(col, "_"))) : Supplied 2 columns to be assigned 3 items. Please see NEWS for v1.12.2.
我完全理解的错误。但是,我不明白为什么下一段代码不会产生错误:
library(data.table)
DT <- data.table(col = c('a', 'a_b', 'a_b_c'))
DT[, c('col1', 'col2') := tstrsplit(col, '_'), by = .(col)]
DT
Output:
col col1 col2
1: a a a
2: a_b a b
3: a_b_c a b