删除 R 中的第 n 个分隔符

Deleting nth delimiter in R

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

"Bacteria_Firmicutes_Clostridia_Clostridiales_Rumino_coccaceae_Ruminococcus_Ruminococcus_albus"

所以它变成了:

"Bacteria_Firmicutes_Clostridia_Clostridiales_Ruminococcaceae_Ruminococcus_Ruminococcus_albus"

这似乎可行,但我觉得应该有一个更优雅的解决方案,可能使用正则表达式和 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:

> 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"
>