Reemplazar patrones en R con gsub() y sub()
En R se pueden sustituir patrones en cadenas de texto con las funciones gsub
y sub
. En este tutorial aprenderás las diferencias entre estas funciones y cómo eliminar o reemplazar los patrones a través de ejemplos explicando los casos de uso más comunes.
Sintaxis y diferencias
La función gsub
reemplaza todas las coincidencias de un patrón mientras que sub
reemplaza la primera coincidencia de un patrón. La sintaxis básica de las funciones es la misma, ya que necesitarás introducir el patrón (pattern
), el texto de reemplazo (replacement
) que quieras y la cadena de caracteres original (x
).
# Reemplazar TODAS las coincidencias de un patrón
gsub(pattern, replacement, x)
# Reemplazar LA PRIMERA coincidencia de un patrón
sub(pattern, replacement, x)
Además, estas funciones proporcionan otros argumentos denominados ignore.case
, perl
, fixed
, useBytes
e invert
. Recuerda escribir ?gsub
o ?sub
para leer la documentación oficial de estas funciones y obtener más información.
La función gsub
Considera que tienes una cadena de texto y quieres sustituir la palabra “azul” por la palabra “roja” en todas las ocurrencias. Para ello puedes utilizar la función gsub
como en el ejemplo siguiente.
x <- "La chaqueta era azul"
gsub(pattern = "azul", replacement = "roja", x = x)
"La chaqueta era roja"
Como ya se ha dicho, si hay varias coincidencias, se sustituirán todas.
x <- "La chaqueta era azul y la camisa también era azul"
gsub("azul", "roja", x)
"La chaqueta era roja y la camisa también era roja"
También puedes introducir un vector de caracteres para reemplazar las posibles coincidencias dentro de cada elemento del vector.
x <- c("rojo", "azul", "amarilo", "azul")
gsub("azul", "verde", x)
"rojo" "verde" "amarilo" "verde"
Ten en cuenta que por defecto, la coincidencia de patrones distingue entre mayúsculas y minúsculas, por lo que si quieres ignorar mayúsculas y minúsculas establece ignore.case = TRUE
.
x <- "La chaqueta era azul"
gsub("CHAQUETA", "camisa", x, ignore.case = TRUE)
"La camisa era azul"
Las posibilidades de esta función son enormes, por lo que en las siguientes subsecciones vamos a repasar algunos de los casos de uso más comunes.
Reemplazar comillas
Puedes sustituir las comillas dobles por simples o eliminarlas. Para ello, si quieres sustituir por comillas simples deberás utilizar '"'
como patrón y "'"
como reemplazo y si quieres sustituir por comillas dobles deberás utilizar "'"
como patrón y '"'
como reemplazo.
x <- 'Yo le dije: "me parece bien"'
# Comillas dobles por simples
gsub('"', "'", x)
# Comillas simples por dobles
# gsub("'", '"', x)
"Yo le dije: 'me parece bien'"
Reemplazar espacios
Es posible sustituir o eliminar espacios utilizando " "
como patrón.
x <- 'Nombre Juan'
gsub(" ", ": ", x)
"Nombre: Juan"
Reemplazar barras invertidas (backslash)
Si quieres sustituir la barra invertida no puedes introducirla directamente, sino que tendrás que utilizar "\\\\"
. En el siguiente ejemplo reemplazamos todas las barras invertidas por barras.
x <- "E:\\Documentos\\"
gsub("\\\\", "/", x)
"E:/Documentos/"
Reemplazar puntos
Si pasas un único punto a pattern
, todo el texto se sustituirá. En caso de que quieras reemplazar los puntos, deberás agregar dos barras invertidas antes del punto o usar fixed = TRUE
, como se muestra en el siguiente ejemplo.
x <- "Este es un texto con punto final."
gsub("\\.", "", x)
# Equivalente a:
# gsub(".", "", x, fixed = TRUE)
"Este es un texto con punto final"
Eliminar paréntesis
Para eliminar paréntesis deberás introducir "\\(|\\)"
como patrón. El patrón para los corchetes es "\\[|\\]"
.
x <- "(Texto dentro de paréntesis)"
gsub("\\(|\\)", "", x)
# Para corchetes:
# gsub("\\[|\\]", "", x)
"Texto dentro de paréntesis"
Eliminar números
El patrón pasado a gsub
también puede aceptar expresiones regulares. La siguiente expresión regular ("[0-9]+"
) puede utilizarse para detectar cualquier número.
x <- "12Texto52"
gsub("[0-9]+", "", x)
"Texto"
Ten en cuenta que si estableces fixed = TRUE
la función ignorará la expresión regular y utilizará la cadena de texto del patrón tal cual.
x <- "[0-9]+12Texto52"
gsub("[0-9]+", "", x, fixed = TRUE)
"12Texto52"
Reemplazar varios patrones
Es posible reemplazar múltiples patrones con la función gsub
si separas cada patrón con |
sin espacios. En el siguiente ejemplo la letra “a” o la letra “b” serán reemplazadas por la letra “c”.
gsub("a|b", "c", "ab")
"cc"
Eliminar o reemplazar todo después de una cadena de texto
A veces es necesario eliminar o sustituir todo lo que aparece después de una cadena de texto. Con [x].*
podrás detectar todo después de [x]
, incluyendo [x]
.
x <- "Eliminar texto después de aquí: texto a eliminar"
gsub(" aquí.*", "", x)
"Eliminar texto después de"
Eliminar o reemplazar todo antes de una cadena de texto
Lo contrario de lo anterior es eliminar o sustituir todo lo que precede a una coincidencia. Para ello puedes utilizar .*[x]
para detectar todo lo anterior a [x]
, incluyendo [x]
.
x <- "Eliminar texto antes de aquí: texto a mantener"
gsub(".*aquí: ", "", x)
"texto a mantener"
La función sub
Como ya se ha dicho, la función sub
es equivalente a gsub
pero sólo sustituirá la primera aparición del patrón de entrada. Considera el siguiente ejemplo, en el que el patrón aparece dos veces pero sólo se sustituye la primera aparición.
x <- "rojo verde azul rojo"
sub("rojo", "amarillo", x)
"amarillo verde azul rojo"
Lo mismo ocurre cuando se utilizan expresiones regulares. En el ejemplo siguiente sólo se elimina la primera coincidencia.
x <- "12Text52"
sub("[0-9]+", "", x)
"Text52"