str_replace (paquete stringr) no puede reemplazar los corchetes en r?
Pregunta
tengo una cuerda, digamos
fruit <- "()goodapple"
Quiero eliminar los corchetes de la cadena.Decido usar el paquete stringr porque normalmente puede manejar este tipo de problemas.Yo suelo :
str_replace(fruit,"()","")
Pero no se reemplaza nada y se reemplaza lo siguiente:
[1] "()good"
Si sólo quiero reemplazar el medio soporte derecho, funciona:
str_replace(fruit,")","")
[1] "(good"
Sin embargo, el medio soporte izquierdo no funciona:
str_replace(fruit,"(","")
y se muestra el siguiente error:
Error in sub("(", "", "()good", fixed = FALSE, ignore.case = FALSE, perl = FALSE) :
invalid regular expression '(', reason 'Missing ')''
¿Alguien tiene ideas de por qué sucede esto?Entonces, ¿cómo puedo eliminar el "()" en la cadena?
Solución
Escapar del paréntesis lo hace...
str_replace(fruit,"\\(\\)","")
# [1] "goodapple"
Quizás también quieras considerar explorar el paquete "stringi", que tiene un enfoque similar a "stringr" pero tiene funciones más flexibles.Por ejemplo, hay stri_replace_all_fixed
, que sería útil aquí ya que su cadena de búsqueda es un patrón fijo, no un patrón de expresiones regulares:
library(stringi)
stri_replace_all_fixed(fruit, "()", "")
# [1] "goodapple"
Por supuesto, básico gsub
maneja esto muy bien también:
gsub("()", "", fruit, fixed=TRUE)
# [1] "goodapple"
Otros consejos
La respuesta aceptada funciona para su problema exacto, pero no para el problema más general:
my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace(my_fruits,"\\(\\)","")
## "goodapple" "(bad)apple", "(funnyapple"
Esto se debe a que el regex coincide exactamente con un "(" seguido de un ")".
Suponiendo que se preocupa solo por los pares de soporte, esta es una solución más fuerte:
str_replace(my_fruits, "\\([^()]{0,}\\)", "")
## "goodapple" "apple" "(funnyapple"
Edificio de la respuesta de MJH, esto elimina todo (o):
my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace_all(my_fruits, "[//(//)]", "")
[1] "goodapple" "badapple" "funnyapple"