我想删除一些其他特殊字符的特殊字符。这是两个向量。
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 "'\%"
答案 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字符对象中定义\
,您需要将其转义。
请注意,要对a
中b
中每个元素的每个元素执行矢量化替换,我使用 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