Hen*_*enk 7 split r data.table
在data.table v.1.9.6你可以在列像这样分割变量:
library(data.table)
DT = data.table(x=c("A/B", "A", "B"), y=1:3)
DT[, c("c1", "c2") := tstrsplit(x, "/", fixed=TRUE)][]
Run Code Online (Sandbox Code Playgroud)
所需的分割数[上面:2]并不总是事先知道.当已知拆分数时,如何生成所需的变量名?
n = 2  # desired number of splits
# naive attempt to build required string
m = paste0("'", "myvar", 1:n, "'", collapse = ",")
m = paste0("c(", m, ")" )
# [1] "c('myvar1','myvar2','myvar3')"
DT[, m := tstrsplit(x, "/", fixed=TRUE)][]  # doesn't work
Run Code Online (Sandbox Code Playgroud)
    两种方法.第一个强烈建议:
#one
n=2
DT[, paste0("myvar", 1:n) := tstrsplit(x, "/", fixed=T)][]
#     x y myvar1 myvar2
#1: A/B 1      A      B
#2:   A 2      A     NA
#3:   B 3      B     NA
#two
DT[, eval(parse(text=m)) := tstrsplit(x, "/", fixed=TRUE)][]
#     x y myvar1 myvar2
#1: A/B 1      A      B
#2:   A 2      A     NA
#3:   B 3      B     NA 
Run Code Online (Sandbox Code Playgroud)
额外
如果您事先不知道分割数量:
splits <- max(lengths(strsplit(DT$x, "/")))
DT[, paste0("myvar", 1:splits) := tstrsplit(x, "/", fixed=T)][]
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1349 次  |  
        
|   最近记录:  |