【问题标题】:r data.table - tstrsplit function - first column is blank when column starts with matching stringr data.table - tstrsplit 函数 - 当列以匹配字符串开头时,第一列为空白
【发布时间】:2021-09-01 00:03:36
【问题描述】:

我正在尝试如下拆分字符串

x <- data.table(VAROLD=c('DBA','ADB'))
x[, paste0('VARNEW_', 1:2) := tstrsplit(VAROLD, 'D', fixed=T)][]

我得到如下输出想看看我是否可以避免生成第一列空白。我只查看使用 data.table 包的选项。

VAROLD VARNEW_1 VARNEW_2
1: DBA BA
2: ADB A B

【问题讨论】:

  • 您对第一列的期望是什么
  • VARNEW_1 应该是“BA”并且 VARNEW_2 应该是空白(对于第一行和第二行)

标签: r data.table


【解决方案1】:

那么,当'D'作为第一个字符出现时,我们可能需要进行一些子串移位

x[, paste0('VARNEW_', 1:2) := tstrsplit(sub("^(D)(.*)", "\\2\\1", 
      VAROLD), "D", fixed = TRUE)][]

-输出

  VAROLD VARNEW_1 VARNEW_2
1:    DBA       BA     <NA>
2:    ADB        A        B

或者如果它只是最初的“D”,那么在进行拆分之前将其删除

x[, paste0('VARNEW_', 1:2) := tstrsplit(sub("^D+", "", 
       VAROLD), "D", fixed = TRUE)][]
   VAROLD VARNEW_1 VARNEW_2
1:    DBA       BA     <NA>
2:    ADB        A        B

【讨论】:

  • 谢谢,如果我有两个以上的元素,这会起作用吗?例如在上面的例子中,我创建了 2 列,但是如果我有 5 列呢?
  • @R007 可能您需要展示一个更好的示例,因为您的示例仅显示一个简单的案例
  • @R007 即如果“D”是最后一个字符,那么它的行为会是什么等等?
  • 我认为问题出在字符串以拆分字符开头时。 (最后有 D 不会有问题。)。也许更容易检查字符串是否以拆分字符开头,然后用空白值替换它,然后传递给 tstrsplit()
  • @R007 也许更新后的代码对你有用
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 2021-09-24
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
相关资源
最近更新 更多