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"
对于如何以映射指定的方式重新映射字符串中的字母的建议,我将不胜感激。
假设,例如,我想将所有 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"