R如何重新映射字符串中的字母

R How to remap letters in a string

对于如何以映射指定的方式重新映射字符串中的字母的建议,我将不胜感激。

假设,例如,我想将所有 A 更改为 B,将所有 B 更改为 D,将所有 D 更改为 F。如果我这样做,它不会做我想要的,因为它连续应用转换:

"abc" %>% str_replace_all(c(a = "b", b = "d", d = "f"))

这是我可以做我想做的方法,但感觉有点笨拙。

f <- function (str) str_c( c(a = "b", b = "d", c = "c", d = "f") %>% .[ strsplit(str, "")[[1]] ], collapse = "" )

"abc" %>% map_chr(f)

更好的想法将不胜感激。

詹姆斯.

P.S。忘了具体说明。有时我想用多个字母替换一个字母,例如,将所有 As 替换为字符串 ZZZ.

P.P.S。理想情况下,这也可以处理字符串向量,例如 c("abc", "gersgaesg", etc.)

我们可以在 base R

中使用 chartr
chartr("abc", "bdf", "abbbce")
#[1] "bdddfe"

或者包解决方案是 mgsub,它也可以匹配和替换字符数大于 1

的字符串
library(mgsub)
mgsub("abbbce",  c("a", "b", "c"), c("b", "d", "f"))
#[1] "bdddfe"

mgsub("abbbce",  c("a", "b", "c"), c("ba", "ZZZ", "f"))
#[1] "baZZZZZZZZZfe"

也许这样更优雅?当找不到值时,它还会 return 警告。

library(plyr)
library(tidyverse)
mappings <- c(a = "b", b = "d", d = "f")

str_split("abc", pattern = "") %>% 
  unlist() %>% 
  mapvalues(from = names(mappings), to = mappings) %>%
  str_c(collapse = "")

# The following `from` values were not present in `x`: d
# [1] "bdc"