我试过
> str_replace("abcdef", c("b", "d"), c(b="B", d="D"))
[1] "aBcdef" "abcDef"
Run Code Online (Sandbox Code Playgroud)
希望
[1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)
我们如何用一个特定的替换来替换每个模式,并调用一个函数stringr::str_replace?
小智 24
该chartr()解决方案对我来说也是新的,但我想用多个字符替换单个字符。最终找到了一个stringr(v1.4.0)非常简单的解决方案。事实上,它在帮助页面中,一旦发现这需要str_replace_all.
# one approach that both: answers the original question with stringr
str_replace_all("abcdef", c(b="B", d="D"))
[1] "aBcDef"
# and answers a more general question
str_replace_all("abcdef", c(b="BB", d="DDD"))
[1] "aBBcDDDef"
Run Code Online (Sandbox Code Playgroud)
有str_replace一个选项是用reduce2
library(stringr)
library(purrr)
reduce2(c('b', 'd'), c('B', 'D'), .init = 'abcdef', str_replace)
#[1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)
或者使用匿名函数调用
reduce2(c('b', 'd'), c('B', 'D'), .init = 'abcdef',
~ str_replace(..1, ..2, ..3))
#[1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)
这匹配每个字符,如果等于,b则将其替换为B,如果等于d,则将其替换为D,否则保持原样。
library(gsubfn)
gsubfn(".", list(b="B", d="D"), "abcdef")
## [1] "aBcDef"
Run Code Online (Sandbox Code Playgroud)
这些也有效:
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"
Run Code Online (Sandbox Code Playgroud)
我会把它放在管子里
str_replace('abcdef', 'b', 'B') %>% str_replace(., 'd', 'D')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2764 次 |
| 最近记录: |