2017-02-21 7 views
0

У меня есть вектор R символов:Как заменить последнее вхождение в символ?

a<-'aabbccaabbccaabbcc' 

Я хочу, чтобы заменить последнее вхождение «аа» и все, что следует с «BB». Я пробовал использовать stri_replace_last из stringi пакет с regex (.*)aa(.*). Но он заменяет все, поскольку это одна строка.

Есть ли способ сделать это в R?

+2

Мне кажется, что я видел этот вопрос раньше. –

+0

'gsub (" aa [^ a] * $ "," bb "," aabbccaabbccaabbcc ")'? – r2evans

+0

Я попытался найти что-то подобное, но не смог найти его на stackoverflow – h1990

ответ

3
a <- 'aabbccaabbccaabbcc' 
first <- gsub('^(.*)aa.*$', '\\1', a) 
result <- paste0(first, paste(replicate(nchar(a) - nchar(first), "b"), collapse = "")) 

> a 
[1] "aabbccaabbccaabbcc" 
> result 
[1] "aabbccaabbccbbbbbb" 
       ^^ anything which follows the last 'aa' has been replaced with 'b' 
0

Мы можем использовать gsubfn, чтобы соответствовать два «а», за которой следует ноль или более символов, которые не «а» ([^a]*) до конца ($) строки, заменить найденную строку на тиражирование 'b' по количеству символов совпадающей строки.

library(gsubfn) 
gsubfn("aa[^a]*$", ~strrep("b", nchar(x)), a) 
#[1] "aabbccaabbccbbbbbb" 
+0

Из любопытства, как вы вообще заметили проголосовавший? Ваш счет округляется до тысячи. :) –

+0

@ RomanLuštrik Речь идет не о нисходящем. Если вы можете проверить код, он будет более компактным и однострочным. Итак, если R-новичок, случается, читает этот вопрос/ответы, он/она ничего не подходит, что печально. – akrun

 Смежные вопросы

  • Нет связанных вопросов^_^