stringr str_replace на несколько шаблонов и замен? - PullRequest
1 голос
/ 08 февраля 2020

Я пытался

> str_replace("abcdef", c("b", "d"), c(b="B", d="D"))
[1] "aBcdef" "abcDef"

в надежде на

[1] "aBcDef"

Как мы можем заменить каждый шаблон определенной c заменой одним вызовом функции на stringr::str_replace?

Ответы [ 3 ]

2 голосов
/ 08 февраля 2020

Это соответствует каждому символу, и если оно равняется b, оно заменяет его на B, если оно равняется d, оно заменяет его на D, а в противном случае оставляет его как есть.

library(gsubfn)
gsubfn(".", list(b="B", d="D"), "abcdef")
## [1] "aBcDef"

Это также работает:

gsubfn("[bd]", list(b="B", d="D"), "abcdef")
## [1] "aBcDef"

gsubfn("[bd]", toupper, "abcdef")
## [1] "aBcDef"

# only needs base R
chartr("bd", "BD", "abcdef")
## [1] "aBcDef"
2 голосов
/ 08 февраля 2020

С str_replace можно заключить в reduce2

library(stringr)
library(purrr)
reduce2(c('b', 'd'), c('B', 'D'),  .init = 'abcdef', str_replace)
#[1] "aBcDef"

Или с анонимным вызовом функции

reduce2(c('b', 'd'), c('B', 'D'),  .init = 'abcdef',
         ~ str_replace(..1, ..2, ..3))
#[1] "aBcDef"
1 голос
/ 08 февраля 2020

Я бы положил в трубу

str_replace('abcdef', 'b', 'B') %>% str_replace(., 'd', 'D')
...