library(stringr)4 Expresiones regulares
Son secuencias de caracteres que forman un patrón de búsqueda.
- Cuantificadores
- ? El caracter que precede puede aparecer como mucho una vez
- + El carácter que le precede debe aparecer al menos una vez
- * El carácter que le precede puede aparecer cero, una o más veces
- {} Las llaves juegan el papel de meta caracteres, para que cumplan su funcionalidad deben estar despues de la expresión regular y encierren uno o varios números
- {n} Indica que coincide n veces
- {n,} Indica que coincide n o más veces
- {,n} Indica que coincide hasta n veces
- {n,m} Indica que coincide mas de n veces y menos de m veces
- Alternación
- $ Representa el final de la cadena de caracteres o el final de la línea
- ^ Representa el inicio de la cadena
- Agrupación
- () Son usados para la aplicación de operadores sobre más de un caracter
- [] Agrupan caracteres en grupos o clases
- [a-z] Especifica un rango de caracteres
- [^…. ] Lista de caracteres excluidos
- | Separa las alternativas
- . Busca cualquier carácter sin incluir los saltos de línea
- Agrupaciones definidas
- [:alnum:] Caracteres alfanuméricos
- [:alpha:] Caracteres
- [:blank:] Caracteres blancos
- [:digit:] Dígitos
- [:lower:] Todas las letras minúsculas
- [:upper:] Todas las letras mayúsculas
- [:punct:] Caracteres de puntuación
- Barra invertida
- \d Dígito del 0 al 9
- \w Cualquier carácter alfanumérico
- \s Un espacio en blanco
- \D Cualquier carácter que no sea un dígito del 0 al 9
- \W Cualquier carácter no alfanumérico
- \S Cualquier carácter que no sea un espacio en blanco
- \d Dígito del 0 al 9
El paquete stringr, entre otros, permite el uso de expresiones regulares
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 vezpostres <- 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::iris3colnames(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"