Удаление шаблона с помощью gsub в r


У меня есть строка Project Change Request (PCR) - HONDA DIGITAL PLATEFORM, сохраненная в supp_matches, и supp_matches1 содержит строку Project Change Request (PCR) -.

supp_matches2 <- gsub("^.*[supp_matches1]","",supp_matches)
supp_matches2
# [1] " (PCR) - HONDA DIGITAL PLATEFORM"

Что на самом деле не правильно, но это должно быть похоже на

supp_matches2
# [1] "HONDA DIGITAL PLATEFORM"
Почему все идет не так, как должно быть?
2 2

2 ответа:

Как я уже сказал в своем комментарии, в вашем выражении gsub("^.*[supp_matches1]", "", supp_matches) вы на самом деле используете не объект supp_matches1, а только буквы внутри него.

Вы можете сделать что-то вроде gsub(paste0("^.*", supp_matches1), "", supp_matches), чтобы действительно использовать выражение, содержащееся в supp_matches1, за исключением того, что, как упоминалось в @rawr, у вас есть скобки в выражении, поэтому вам нужно будет их удалить.
Правильное выражение, чтобы получить то, что вы хотите, было бы тогда sub("Project Change Request \\(PCR\\) - ", "", supp_matches)

Чтобы получить то, что вы хотите, вы можете использовать параметр fixed gsub (sub) функция, которая говорит, что выражение в параметре pattern будет соответствовать так, как оно есть (таким образом, без необходимости экранировать что-либо, но и без реального регулярного выражения).

Итак, то, что вы ищете, это:

gsub(supp_matches1, "", supp_matches, fixed=TRUE) # or just with `sub` in this case
#[1] "HONDA DIGITAL PLATEFORM"

Уже @cathG предоставил ответ с фиксированным=TRUE. Если вы хотите сделать все с регулярным выражением, то вы можете попробовать это.

> w1 <- "Project Change Request (PCR) - HONDA DIGITAL PLATEFORM"
> w2 <- "Project Change Request (PCR) - "
> sub(paste0("^", gsub("(\\W)", "\\\\\\1", w2)), "", w1)
[1] "HONDA DIGITAL PLATEFORM"

Это просто своего рода экранирование всех специальных символов, присутствующих внутри переменной, которую вы хотите использовать в качестве первого параметра в подфункции.