2013-11-18 2 views
4

вопрос кажется совершенно тривиальным, но я не могу понять, почему он не работает. Я просто хочу заменить символьную переменную с оператором «+» с единственным значением, исключая оператор «+». По какой-либо причине функция gsub() и sub() заменяет числовое значение, но сохраняет оператор. Любой намек на то, как это можно преодолеть? Большое спасибо!R: Заменить символ «+» на gsub

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

ответ

7

+ является метасимволом, и нужно экранировать, когда вы хотите, чтобы соответствовать его:

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

Или в более общем случае, если вы хотите, чтобы удалить + :

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

Если неэкранированный, + означает «PRECE элемент ding будет согласован один или несколько раз », поэтому в вашем втором примере элемент "5" из "5+" соответствует шаблону и заменяется на "", оставляя вас с "+".

+0

Спасибо большое! Я думал, что это должно быть с концепцией операторов/метасимволов в R. – Triamus

+1

Вы также можете использовать 'gsub (pattern =" + "," ", fixed = TRUE, x = data)' для шаблона, который будет рассматриваться как буквальный , –

1

Вы также можете использовать strsplit:

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

Используйте fixed=TRUE вариант:

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

Смежные вопросы