Заменить символ в строке в зависимости от позиции - PullRequest
0 голосов
/ 16 апреля 2020

В моих трех строках ниже я хотел бы заменить последний знак | в строке одним знаком _, оставив другой без изменений. Как указать, чтобы заменить только последний?

In:

   d__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus|argenteus                      797
    d__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus|capitis                          0
    d__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus|caprae                         428

Out:

d__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus_argenteus                      797
d__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus_capitis                          0
d__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus_caprae                         428

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Использование stri_replace_last_fixed сделало бы это простым.

string <- 'd__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus|argenteus'
stringi::stri_replace_last_fixed(string, "|", "_")

#[1] "d__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus_argenteus"
0 голосов
/ 16 апреля 2020

Вот решение R base с gsub и обратной ссылкой:

gsub("\\|(\\w+$)", "_\\1", string)
[1] "d__Bacteria|p__Firmicutes|c__Bacilli|o__Staphylococcales|f__Staphylococcaceae|g__Staphylococcus|s__Staphylococcus_argenteus"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...