Заменить несколько строк, состоящих из разного количества символов, одним gsubfn()

Здесь Замените несколько строк в одном gsub( ) или оператор chartr() в R? объясняется, как заменить несколько строк одного символа at в одном операторе на gsubfn(). Например.:

x <- "doremi g-k"
gsubfn(".", list("-" = "_", " " = ""), x)
# "doremig_k"

Однако я хотел бы заменить строку «doremi» в примере на «». Это не работает:

x <- "doremi g-k"
gsubfn(".", list("-" = "_", "doremi" = ""), x)
# "doremi g_k"

Я предполагаю, что это из-за того, что строка «doremi» содержит несколько символов, а я использую метасимвол . в gsubfn. Я понятия не имею, чем его заменить — должен признаться, что иногда мне трудно понять использование метасимволов. Таким образом, есть ли способ заменить «-» и «doremi» одновременно?


person koteletje    schedule 03.01.2019    source источник


Ответы (3)


Это работает для вас?

gsubfn::gsubfn(pattern = "doremi|-", list("-" = "_", "doremi" = ""), x)
[1] " g_k"

Ключом является этот поиск: "doremi|-", который указывает искать либо "doremi", либо "-". Используйте "|" в качестве оператора or.

person RLave    schedule 03.01.2019

Возможно, вы сможете просто использовать базу R sub здесь:

x <- "doremi g-k"
result <- sub("doremi\\s+([^-]+)-([^-]+)", "\\1_\\2", x)
result

[1] "g_k"
person Tim Biegeleisen    schedule 03.01.2019

Просто более общее решение для решения @RLave -

toreplace <- list("-" = "_", "doremi" = "")
gsubfn(paste(names(toreplace),collapse="|"), toreplace, x)
[1] " g_k"
person Vivek Kalyanarangan    schedule 03.01.2019