Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:替换+&引用;带gsub的字符_R_Operator Keyword_Gsub - Fatal编程技术网

R:替换+&引用;带gsub的字符

R:替换+&引用;带gsub的字符,r,operator-keyword,gsub,R,Operator Keyword,Gsub,这个问题看起来微不足道,但我不明白为什么它不起作用。我只想用一个不包括“+”运算符的值替换一个包含“+”运算符的字符变量。出于某种原因,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="",

这个问题看起来微不足道,但我不明白为什么它不起作用。我只想用一个不包括“+”运算符的值替换一个包含“+”运算符的字符变量。出于某种原因,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"  "+"

数据
+
是元字符,需要在匹配时转义:

gsub(pattern="5\\+",replacement="5",x=data)
#[1] "1" "2" "3" "4" "5"
或者更一般地说,如果要删除
+

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

如果未替换,
+
表示“前面的项将被匹配一次或多次”,因此在第二个示例中,
“5+”
“5”
元素由模式匹配,并替换为
,这样您就可以使用
strsplit

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

使用
fixed=TRUE
选项:


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

非常感谢!我想它一定是带有R中运算符/元字符概念的sth。您也可以
gsub(pattern=“+”,“”,fixed=TRUE,x=data)
将模式视为文字。