【问题标题】:Split a string and append it to a vector [duplicate]拆分字符串并将其附加到向量[重复]
【发布时间】:2022-01-20 14:51:39
【问题描述】:

我有一个字符向量,其中字符串元素有或没有斜杠(/)。

sem_tags <- ('F2', 'A1/B1', 'X3.2', 'M3fn', 'E2/Q2')

我希望将那些带有斜杠的标签存储为两个单独的标签,以便最终得到

new_sem_tags <- ('F2', 'A1', 'B1', 'X3.2', 'M3fn', 'E2', 'Q2')

这是我目前尝试过的。

new_sem_tags <- c()
for (i in 1:length(sem_tags)){
  if (grepl("/", i)){
    append(new_sem_tags, str_split(i, '/'))
  } else {
    appendnew_sem_tags, i)
  }
  i = i+1
}

很遗憾,这不起作用。当我分别尝试每个功能时,例如,拆分和附加它们似乎完成了这项工作。但是,我注意到附加会返回输出,但不会“存储”输出。这可能是问题吗?如果是,我该如何克服?

提前致谢!

【问题讨论】:

  • 在 R 中,除非您使用 &lt;-= 分配结果,否则几乎不会存储/修改内容。如果您以x &lt;- 5 开头,x+1 将打印 6 但不会更改 x——如果您想更改 x,则需要 x &lt;- x + 1。同样append(x, 10) 将打印5 10,但如果你想修改x 你需要x &lt;- append(x, 10)。在您的情况下,您可以使用new_sem_tags &lt;- append(new_sum_tags, ...)(尽管 lovalery 的解决方案更清洁)。
  • @GregorThomas 感谢您的评论!我也尝试过,但它给了我一个奇怪的结果。我得到了一个整数向量(1, 2, 3, 4, 5 ... ),它达到了sem_tags 向量的长度。

标签: r string split append


【解决方案1】:

使用base R,您可以:

Reprex

sem_tags <- c('F2', 'A1/B1', 'X3.2', 'M3fn', 'E2/Q2')

unlist(strsplit(sem_tags, "/"))
#> [1] "F2"   "A1"   "B1"   "X3.2" "M3fn" "E2"   "Q2"

reprex package (v2.0.1) 于 2022-01-20 创建

【讨论】:

  • 非常感谢!如此简单,而且奏效了!
  • @user22037 非常感谢您的反馈。很高兴我能帮上忙。干杯
【解决方案2】:

我们可以scan它在:

scan(text = sem_tags, what = "", sep = "/", quiet = TRUE)
## [1] "F2"   "A1"   "B1"   "X3.2" "M3fn" "E2"   "Q2"  

注意

问题在输入的定义中有语法错误,所以我们使用了这个。

sem_tags <- c('F2', 'A1/B1', 'X3.2', 'M3fn', 'E2/Q2')

【讨论】:

  • 非常感谢!这也有效!
【解决方案3】:

另一种选择是stringr::str_split

str_split(c('F2', 'A1/B1', 'X3.2', 'M3fn', 'E2/Q2'), pattern = "/") %>% 
  unlist()
[1] "F2"   "A1"   "B1"   "X3.2" "M3fn" "E2"   "Q2"  

【讨论】:

  • 这也行得通,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 2015-11-22
  • 2019-08-05
  • 1970-01-01
  • 2010-12-01
相关资源
最近更新 更多