4  Expresiones regulares

Son secuencias de caracteres que forman un patrón de búsqueda.

El paquete stringr, entre otros, permite el uso de expresiones regulares

library(stringr)
frutas <- c("arándano", "plátano", "pera", "sandía", "melón", "fresa")
str_view(frutas, "^a", html=T) # empiece con "a"
str_view(frutas, "o$", html=T) # termine con "o"
str_view(frutas, "e+", html=T) # contenga "e" al menos una vez
postres <- c("pie de manzana", "manzana", "queque de manzana", "pie de piña", 
             "queque de naranja", "queque de piña")
str_view(postres, "manzana", html=T)
str_view(postres, "manzana|piña", html=T)
patron <- "(manzana|piña)"
grep(pattern=patron, postres) # obtiene la posición de elementos que cumplen el patrón
[1] 1 2 3 4 6
grep(pattern=patron, postres, value=T) # obtiene la lista que cumple el patrón
[1] "pie de manzana"    "manzana"           "queque de manzana"
[4] "pie de piña"       "queque de piña"   
patron <- "pie"
grep(pattern=patron, postres)
[1] 1 4
grep(pattern=patron, postres, invert=T, value= T)
[1] "manzana"           "queque de manzana" "queque de naranja"
[4] "queque de piña"   
postres_no_pie <- postres[-grep(pattern=patron, postres)]
postres_no_pie
[1] "manzana"           "queque de manzana" "queque de naranja"
[4] "queque de piña"   

4.1 Pre-procesamiento

También pueden utilizarse las expresiones regulares para realizar pre-procesamiento de los datos.

Por ejemplo, en el siguiente vector, se han introducido valores de dinero, pero considerando la , como separador de miles. De no existir estos caracteres, bastaría con ejecutar el comando as.numeric para convertir el vector de tipo texto a tipo numérico.

money <- c("1,000,000", "2,000,000", "300,000.30", "40,000", "5,000.05")
as.numeric(money)
Warning: NAs introducidos por coerción
[1] NA NA NA NA NA

Con ayuda de las expresiones regulares buscaresmos las , y las eliminaremos.

money <- gsub(",", "", money)
as.numeric(money)
[1] 1000000.00 2000000.00  300000.30   40000.00    5000.05

También, podemos emplear gsub para eliminar caracteres y espacios vacíos en el nombre de las columnas. Por ejemplo

df <- datasets::iris3
colnames(df)
[1] "Sepal L." "Sepal W." "Petal L." "Petal W."
colnames(df) <- gsub(" ", "_", colnames(df))
colnames(df)
[1] "Sepal_L." "Sepal_W." "Petal_L." "Petal_W."

Por supuesto, también podemos eliminar el .

colnames(df) <- gsub("\\.", "", colnames(df))
colnames(df)
[1] "Sepal_L" "Sepal_W" "Petal_L" "Petal_W"