yihui 是的,我觉得 vapply 可以取代所有 sapply的使用场景,更加安全。
Fye 可以使用 tstrsplit
library(data.table)
dt <- data.table(
Category = c(
"Q-Y-M-V", "E-E-E-H"
)
)
dt[, paste0("Category_", 1:4) := tstrsplit(Category, split = "-")][]
#> Category Category_1 Category_2 Category_3 Category_4
#> 1: Q-Y-M-V Q Y M V
#> 2: E-E-E-H E E E H
tstrsplit 基本就是strsplit的一个wrapper. 它就是把拆分出来的第一部分作为一个list,第二部分作为list....
小彩蛋一枚:如何只根据最后一个-拆分,即把 Q-Y-M-V 拆分为 Q-Y-M 与 V
dt[, paste0("Category_", c("1_2_3","4")) := tstrsplit(Category, split = "-(?=\\w$)", perl=TRUE)][]
#> Category Category_1_2_3 Category_4
#> 1: Q-Y-M-V Q-Y-M V
#> 2: E-E-E-H E-E-E H
使用正向先行断言(怎么这么拗口)即可。