Como remover caracteres especiais específicos em R

Tenho algumas frases como esta.

c = "In Acid-base reaction (page[4]), why does it create water and not H+?" 

quero remover todos os caracteres especiais excepto '?&+-/

Eu sei que se eu quiser remover todos os caracteres especiais, eu posso simplesmente usar

gsub("[[:punct:]]", "", c)
"In Acidbase reaction page4 why does it create water and not H"

no entanto, alguns caracteres especiais como+ -? também são removidos, que pretendo manter.

Eu tentei criar uma sequência de caracteres especiais que eu posso usar em algum código como este

gsub("[special_string]", "", c)
O melhor que posso fazer é inventar isto.

cat("!\"#$%()*,.:;<=>@[\\]^_`{|}~.")
No entanto, o seguinte código não funciona.
gsub("[cat("!\"#$%()*,.:;<=>@[\\]^_`{|}~.")]", "", c)
O que devo fazer para remover personagens especiais, excepto alguns que quero guardar?

Obrigado.
Author: zx8754, 2014-02-08

3 answers

gsub("[^[:alnum:][:blank:]+?&/\\-]", "", c)
# [1] "In Acid-base reaction page4 why does it create water and not H+?"
 19
Author: BrodieG, 2014-02-08 03:41:45
Acho que procuras uma solução regex. Eu vou dar - lhe uma solução confusa e um pacote adicionar na solução (desavergonhada auto-promoção).

Há provavelmente um melhor regex:

x <- "In Acid-base reaction (page[4]), why does it create water and not H+?" 
keeps <- c("+", "-", "?")

## Regex solution
gsub(paste0(".*?($|'|", paste(paste0("\\", 
    keeps), collapse = "|"), "|[^[:punct:]]).*?"), "\\1", x)

#qdap: addon package solution
library(qdap)
strip(x, keeps, lower = FALSE)

## [1] "In Acid-base reaction page why does it create water and not H+?"
 5
Author: Tyler Rinker, 2014-02-08 03:38:17
{[[2]} para que o seu método funcione, você precisa colocar o literal "]" imediatamente após o líder " ["
 gsub("[][!#$%()*,.:;<=>@^_`|~.{}]", "", c)
[1] "In Acid-base reaction page4 why does it create water and not H+?"
Podes pôr o interior em qualquer lado. Se precisasse excluir o menos, teria de ser o último. Estás a ver?página regex depois de todas essas classes especiais de caracteres pré-definidos são listados.
 4
Author: 42-, 2014-02-08 04:41:35