【发布时间】:2017-06-20 04:09:03
【问题描述】:
在 R 中,可以使用chartr 将字符从一个更改为另一个,例如:
chartr("aor","u ^","Stackoverflow")
[1] "Stuck ve^fl w"
模式可以是范围(例如chartr("a-hwo","0-9","Stackoverflow")),但长度需要匹配。
但是如何替换"-"?
> chartr("ab-;","1234","aaa bbb ccc --- ;")
Error in chartr("ab-;", "1234", "aaa bbb ccc --- ;") :
decreasing range specification ('b-;')
> chartr(";-ab","4312","aaa bbb ccc --- ;")
Error in chartr(";-ab", "4312", "aaa bbb ccc --- ;") :
'old' is longer than 'new'
> chartr("ab\-;","1234","aaa bbb ccc --- ;")
Error: '\-' is an unrecognized escape in character string starting ""ab\-"
> chartr("ab--;","1234","aaa bbb ccc --- ;")
Error in chartr("ab--;", "1234", "aaa bbb ccc --- ;") :
decreasing range specification ('b--')
我找到了一种解决方法 - 将 char 放在开头或结尾:
> chartr("ab;-","1243","aaa bbb ccc --- ;")
[1] "111 222 ccc 333 4"
但我使用它来随机替换字符,所以在我的模式中 "-" 可以在任何地方:
chartr(
old = "-!\"#$%&'()*+,./:;<=>?@[\\]^_`{|}~ "
,new = "-!\"#$%&'()*+,./:;<=>?@[\\]^_`{|}~ " %>% strsplit("") %>% .[[1]] %>% sample %>% paste(collapse="")
, x = "x@&*#--s"
) # this randomly is ok or throw error (about length or decreasing range)
有没有办法关闭范围/转义范围字符/等?
【问题讨论】:
-
我不知道,但如果你愿意使用
stringi::stri_trans_char("aaa bbb ccc --- ;", "ab-;","1234"),那么它可以工作。 -
@Jota 这是一个非常不错的选择。