用gsub替换“+”字符

4

这个问题看起来很琐碎,但我想不通为什么它没能正常工作。我只是想用一个单一的值替换涉及“+”运算符的字符变量。但不知何故,gsub()和sub()函数会替换数字值,但保留运算符。有任何解决方法吗?

data <- c(1,2,3,4,"5+")
gsub(pattern="5+",replacement="5",x=data)
#[1] "1"  "2"  "3"  "4"  "5+"

gsub(pattern="5+",replacement="",x=data)
#[1] "1"  "2"  "3"  "4"  "+"

R 3.0.2

3个回答

8

+ 是一个元字符,需要进行转义才能匹配它:

gsub(pattern="5\\+",replacement="5",x=data)
#[1] "1" "2" "3" "4" "5"

更通俗易懂的翻译如下:

如果您想删除+,或者更普遍地说:

gsub(pattern="\\+",replacement="",x=data)

如果未转义,+ 表示“前面的项目将被匹配一次或多次”,因此在您的第二个示例中,"5+""5" 元素与该模式匹配,并被替换为 "",留下 "+"

非常感谢!我一直在想这一定是R中运算符/元字符概念的问题。 - Triamus
1
你也可以使用 gsub( pattern="+" , "" , fixed = TRUE , x = data ),将模式视为文字处理。 - Simon O'Hanlon

4

使用fixed=TRUE选项:

gsub(pattern="+", replacement="", fixed=TRUE, c(1,2,3,4,"5+"))

意思是在替换时将模式视为固定字符串而非正则表达式。这里的例子是将字符串中所有的"+"替换为空字符串,同时保留其他字符和数字。

1
您也可以使用strsplit:

as.numeric(strsplit(data, "\\+"))
# [1] 1 2 3 4 5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接