将特殊字符替换为R

时间:2015-11-22 18:27:56

标签: r string vector gsub

我想删除一些其他特殊字符的特殊字符。这是两个向量。

a <- c('%', '&')
b <- c('\%', '\&')

我想将向量a的元素替换为向量b中向量v1的对应元素。

v1 <- c('I got 95% in maths & 80% in science',
        'He got 90% in maths & 70% in science')

我尝试了gsub,但它确实无效。 此外,我无法创建向量b,因为它给出了以下错误。

Error: '\%' is an unrecognized escape in character string starting "'\%"

3 个答案:

答案 0 :(得分:2)

我们可以使用mgsub

中的qdap
library(qdap)
mgsub(a, b, v1)

数据

v1 <- c('I got 95% in maths & 80% in science',
        'He got 90% in maths & 70% in science')
b <- c('\\%', '\\&')

答案 1 :(得分:1)

如果您只需要为a向量中包含的字符添加反斜杠,那么您可以尝试基础R

gsub(paste0("(",paste(a,collapse="|"),")"),"\\\\\\1",v1)

太糟糕了,执行任务只需要6(!)个连续反斜杠。

答案 2 :(得分:0)

错误是由对象\中的b未转义而生成的。尝试如下,它将工作。请注意,字符串本身使用cat()显示为单个反斜杠,但使用两个进行打印。要在R字符对象中定义\,您需要将其转义。

请注意,要对ab中每个元素的每个元素执行矢量化替换,我使用 stringi ,这非常适合矢量化替换。

a <- c('%', '&')
b <- c('\\%', '\\&')
c <- c("I got 95% in maths & 80% in science", "He got 90% in maths & 70% in science")

(result <- sapply(c, stringi::stri_replace_all_fixed, a, b, vectorize_all = FALSE, USE.NAMES = FALSE))
## [1] "I got 95\\% in maths \\& 80\\% in science"  "He got 90\\% in maths \\& 70\\% in science"

cat(result)
## I got 95\% in maths \& 80\% in science He got 90\% in maths \& 70\% in science