微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

如果您提供有关如何以地图指定的方式重新映射字符串中的字母的建议,我将不胜感激。

例如,假设我想将所有 As 更改为 Bs,将所有 Bs 更改为 Ds,并将所有 Ds 更改为 Fs。如果我这样做,它不会做我想要的,因为它连续应用转换:

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

这是一种我可以做我想做的事,但感觉有点笨拙。

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

"abc" %>% map_chr(f)

更好的想法将不胜感激。

詹姆斯。

附言忘记指定了。有时我想用多个字母替换一个字母,例如,用字符串 ZZZ 替换所有的 As。

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

解决方法

我们可以在 chartr 中使用 base R

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("ba","ZZZ","f"))
#[1] "baZZZZZZZZZfe"
,

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

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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。