【问题标题】:Deleting nth delimiter in R删除 R 中的第 n 个分隔符
【发布时间】:2021-12-01 11:12:17
【问题描述】:

我正在尝试删除此字符串中的第 5 个分隔符:

"Bacteria_Firmicutes_Clostridia_Clostridiales_Rumino_coccaceae_Ruminococcus_Ruminococcus_albus"

这样就变成了:

"Bacteria_Firmicutes_Clostridia_Clostridiales_Ruminococcaceae_Ruminococcus_Ruminococcus_albus"

这似乎可行,但我觉得应该有一个更优雅的解决方案,可能使用 regex 和 str_replace

library(stringr)
name <- "Bacteria_Firmicutes_Clostridia_Clostridiales_Rumino_coccaceae_Ruminococcus_Ruminococcus_albus"
index <- str_locate_all(name, "_")[[1]]
str_sub(name, index[5, "start"], index[5, "end"]) <- ""
name

【问题讨论】:

  • 你的意思是你只想从字符串中删除第五个下划线(“_”)?还是要将字符串拆分为第五个下划线之前/之后的两个字符串?还是别的什么?
  • ^前者,抱歉,为了更清楚,我编辑了我的帖子
  • 由于已关闭,我无法提供正确的“答案”。但是,这应该可以:gsub("((?:[^_]+_){4}[^_]+)_", "\\1", name)(其中name 是您定义的字符串)

标签: r regex stringr


【解决方案1】:

试试gsub:

> gsub("((?:[^_]+_){4}[^_]+)_", "\\1", name)
[1] "Bacteria_Firmicutes_Clostridia_Clostridiales_Ruminococcaceae_Ruminococcus_Ruminococcus_albus"
> 

或者一种不那么“漂亮”的方式:

> gsub("([^_]*_[^_]*_[^_]*_[^_]*_[^_]*)_", "\\1", name)
[1] "Bacteria_Firmicutes_Clostridia_Clostridiales_Ruminococcaceae_Ruminococcus_Ruminococcus_albus"
> 

或者使用 strex 库:

> library(strex)
> paste(str_before_nth(name, "_", 5), str_after_nth(name, "_", 5), sep="")
[1] "Bacteria_Firmicutes_Clostridia_Clostridiales_Ruminococcaceae_Ruminococcus_Ruminococcus_albus"
> 

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多