r - 在 data.table tstrsplit 中动态分配分割数

标签 r split 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)][]

所需的拆分数量 [above: 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

最佳答案

两种方法。第一个强烈建议:

#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 

额外

如果您事先不知道拆分的数量:
splits <- max(lengths(strsplit(DT$x, "/")))
DT[, paste0("myvar", 1:splits) := tstrsplit(x, "/", fixed=T)][]

关于r - 在 data.table tstrsplit 中动态分配分割数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33200179/

相关文章:

r - 如何识别条件特定边界内的行并计算差异?

r - Bookdown 到 PDF 定理环境重复

Javascript 用于分割字符串并循环以获取字符

r - 从 R 的 sf 包中并行化 st_union

c++ - 如何使用 C++ 拆分字符串,然后选择最后一部分?

JavaScript split 为空字符串赋予数组大小 1,而不是 0

regex - R 用于非常大的字符串的更快的 gregexpr

r - 通过重叠时间间隔查找变量的最大值

r - 将字符串拆分为固定大小的 block

r - 根据分组条件过滤数据集