Expresiones regulares en R

por | Mar 27, 2016 | R | 9 Comentarios

SUBSTRING – Seleccionar un substring

texto <- "¡Hola Mundo!"
substring(texto, 7,11)
[1] "Mundo"
substring(texto, 7, 11) <- "Pacos"  #Sustituye la cadena del substring por la asignada
[1] "¡Hola Pacos!"

NCHAR – Longitud de la cadena

nchar(texto)
 [1] 12

PASTE – Concatenar cadenas

paste("¡Adiós", "Mundo!")
 [1] "¡Adiós Mundo!"
paste("¡Adiós", "Mundo!", sep="_")
 [1] "¡Adiós_Mundo!"

SPRINTF – Imprimir cadenas de texto con números

i <- 9
 sprintf("El cuadrado de %d es %d", i, i^2)
 [1] "El cuadrado de 9 es 81"

STRSPLIT – Separar una cadena en partes

strsplit("Me/gusta/programar/en/R", "/")
 [[1]]
 [1] "Me"        "gusta"     "programar" "en"        "R"

CHARTR – Sustituir caracteres en cadena

chartr("o", "a", "¡Hola Mundo!")
 [1] "¡Hala Munda!"

GREPL – Determina si una sub-cadena pertenece a una cadena

chars <- "testo" 
value <- "est"
grepl(value, chars)
[1] TRUE

GREPL (Multiple) – Determina alguna sub-cadena pertenece a una cadena

valores <- c("rojo","roja" ,"colorado")
texto <- c("La sangre es roja", "El cielo es azul", "Me enrojo al verte")
grepl(paste(valores, collapse = "|"), texto)
[1]  TRUE FALSE  TRUE

GREP – Encuentra patrones de la expresión regular en la cadena

musicos <- c("Handel","Mendel", "Haendel", "Händel", "Handemore", "handel")
 patron <- "H(a|ä|ae)ndel"
 grep(patron, musicos)
 [1] 1 3 4

REGEXPR – Encuentra en índice donde se encuentrala primera aparición de la expresión regular en la cadena

regexpr(patron, musicos)
 [1]  1 -1  1  1 -1 -1
attr(,"match.length")
 [1]  6 -1  7  6 -1 -1

GREGEXPR – Encuentra en índice donde se encuentrala primera aparición de la expresión regular en la cadena

gregexpr(patron, "Georg Friedrich Händel, en inglés George Frideric Handel fue un compositor alemán.")
 [[1]]
 [1] 17 51
 attr(,"match.length")
 [1] 6 6

STRAPPLYC- Encuentra en una cadena los elementos que cumplan la expresión regular

install.packages("gsubfn")    
library(gsubfn)
strapplyc("Encuentra el 2017 como año", "[12]\\d{3}")
[[1]]
[1] "2017"

GSUB- Sustituye en una cadena los elementos que cumplan la expresión regular por otro que se indique

gsub("[12]\\d{3}", "DOS MIL DIECISIETE", "Cambia el año 2017")
[1] "Cambia el año DOS MIL DIECISIETE"
SintasisDescripciónEjemplo
\\dDígito del 1 al 90,1,2 … 9
\\DDistinto de dígitoA, a, $, )
\\sEspacio
\\SDistinto de espacio
\\wPalabraA, B, C, d, e, f, …
\\WDistinto de palabra_, &, #, …
\\tTabulador
\\nSalto de linea
^Comienzo de cadena^C -> Casa, Coche, …
$Fin de cadenas$ -> Casas, coches, …
\Caracteres especiales.\\, \+
|O lógico OR(v|b)aca -> vaca o baca
Cualquier carácter excepto \n
[ab]O lógico ORa, b
[^ab]Distintos de abc, d, e, f, …
[0-9]Todos los dígitos0, 1, 2, 3, …
[A-Z]Todas las letras mayúsculasA, B, C, …
[a-z]Todas las letras minúsculasa, b, c, …
[A-z]Todas las letrasA, B, C, d, e, f, …
a+Letra «a» al menos una veza, aa, aaa, …
a*Letra «a» cero o más vecesa, , aa, aaa, …
a?Letra «a» cero o una veza
a{4}Buscar 4 «a» seguidasaaaa
a{2,4}Buscar entre 2 y 4 «a» seguidasaa, aaa, aaaa
a{2,4}?Buscar entre 2 y 4 «a» seguidas como mucho una vezaa, aaaa, …
a{2,}Busca a partir de 2 «a» seguidasaa, aaa, aaaa, aaaa, …
[:alnum:]Caracteres alfanuméricos [:alpha:] y [:digit:]A, B, c, d, 1, 2, …
[:alpha:]Caracteres: [:lower:] y [:upper:]A, B, c, d, …
[:blank:]Caracteres blancosEspacio, Tabulador, …
[:cntrl:]Caracteres de control
[:digit:]Dígitos0, 1, 2, 3, …
[:graph:]Caracteres gráficos [:alnum:] y [:punct:]A, B, c, d, 1, 2, #, %, …
[:lower:]Todas las letras minúsculasa, b, c, …
[:print:]Caracteres gráficos [:alnum:] y [:punct:]A, B, c, d, 1, 2, #, %, …
[:punct:]Caracteres de puntuación! » # $ % & ‘ ( ) * + , – . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
[:space:]Caracteres de espaciadoEspacio, tabulador, nueva linea, …
[:upper:]Todas las letras mayúsculasA, B, C, …
[:xdigit:]Dígitos hexadecimales0, 1, 2, 3, A, B, e, f, …

9 Comentarios

  1. Pablo

    Buenos dias Diego,
    muy buen trabajo, es muy útil. Lo único, que la sintaxis para fin de cadena no me funciona, en lugar de como está puesto lo he usado al revés: «s$» y va perfecto.
    Un saludo

    Responder
    • Diego Calvo

      Gracias por tu comentario, lo he corregido para que a nadie le vuelva a dar problemas.

      Responder
  2. Jose Guerra

    Gracia, muy,pero muy buen aporte, mas aun cuando no se encuentra mucha documentación de R en español

    Responder
    • Diego Calvo

      Me alegro mucho de leer tus comentarios.

      Responder
  3. roger

    identificar la primera letra de una palabra y convertirla a mayuscula

    Responder
  4. Richarlison

    En el ejemplo 2 de substring usted cambió «mundo» por «pacos», pero si en vez de pacos usted lo cambiara por «pacosta». Sólo cambiaría 5 caracteres.

    Como se tendría que hacer para que se pueda agregar una palabra con un mayor número de caracteres?

    Muchas gracias de antemano.

    Responder
    • stat

      texto=gsub(«Mundo», «pacosta», texto)

      Responder
  5. Polita

    Ayuda, por favor. Como hacer para buscar puntos o vacíos o caracteres especiales en una fila de texto.

    Responder
  6. Jose Luis

    Hola a todos, ¿cómo elimino los caracteres vacíos? , es decir no deseo la fila 4,5 y 6 por ejemplo que no tienen información.

    Muchas gracias.

    «Oficinista Proceso Concluido»
    [3] «Cerrado»
    [4] «»
    [5] «»
    [6] «»
    [7] «002 2012»
    [8] «Profesional Economista Proceso Concluido»
    [9] «Cerrado»
    [10] «»
    [11] «»
    [12] «»
    [13] «003 2012»

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada.