首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stringr包替换字符

stringr包替换字符
EN

Stack Overflow用户
提问于 2017-08-24 14:12:59
回答 2查看 449关注 0票数 2

我正在尝试使用string r包将字符串中的每个字符替换为以下规则:

代码语言:javascript
复制
replace_characters <- function(x){str_replace_all(x,c("A"="N",'B'='O','C'='P','D'='Q','E'='R','F'='S','G'='T','H'='U','I'='V','J'='W','K'='X','L'='Y','M'='Z',
'N'='A','O'='B','P'='C','Q'='D','R'='E','S'='F','T'='G','U'='H','V'='I','W'='J','X'='K','Y'='L','Z'='M','0'='5','1'='6','2'='7','3'='8','4'='9','5'='0','6'='1','7'='2','8'='3','9'='4'))}

然后我用一个随机字符串尝试了这个函数:

代码语言:javascript
复制
replace_characters("HSNKSL584")

我得到了:

代码语言:javascript
复制
"HFAKFL034"

正如您所看到的,一些字母(数字)如预期的那样被替换,但有些保持不变。有人能给我解释一下原因吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-08-24 14:50:16

在幕后,stringr::str_replace_all调用stringistri_replace_all_*函数,如果你使用一个命名向量来描述多个替换模式(这里就是这种情况),那么输入到stri_replace_all_*中的相应参数就包含了vectorize_all = FALSE

来自stri_replace_all_*的帮助文件:

但是,对于stri_replace_all*,如果vectorize_all为FALSE,则与所提供的任何模式匹配的每个子字符串都将替换为相应的替换字符串。在这种情况下,向量化结束字符串,且独立地结束模式和替换。换句话说,这相当于for (i In 1:npattern) str <- stri_replace_all(str,patterni,replacementi...

正如raymkchow & Sotos在评论中指出的那样,当你依次循环替换模式时,一些模式将受到不止一次的影响,有效地逆转了早期循环中的替换。

票数 4
EN

Stack Overflow用户

发布于 2017-08-24 14:45:18

我们可以使用base Rchartr来实现这一点

代码语言:javascript
复制
chartr("HSNKL584", "UFAXY039", "HSNKSL584")
#[1] "UFAXFY039"

这可以变成一个函数

代码语言:javascript
复制
replace_char_fun <- function(str1) {
  old <- paste(c(LETTERS, 0:9), collapse="")
  new <-  paste(c(LETTERS[14:26], LETTERS[1:13], 5:9, 0:4), collapse="")
  chartr(old, new, str1)
}
replace_char_fun( "HSNKSL584")
#[1] "UFAXFY039"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45854196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档