El presente documento contiene el solucionario a los ejercicios 14.2.9.1 del libro de R for Data Science de Hadley Wickham y Garrett Grolemund en su versión en español.
Este documento se realiza con fines académicos para el curso de Técnicas de Exploración de Datos de la carrera de Estadística e Informática de la Universidad Nacional Agraria La Molina de Lima, Perú.
Existe una serie de patrones especiales que coinciden con más de un carácter. Ya has visto ., que coincide con cualquier carácter excepto un salto de línea. Hay otras cuatro herramientas que son de utilidad:
\ d: coincide con cualquier dígito.
\ s: coincidir con cualquier espacio en blanco (por ejemplo, espacio simple, tabulador, salto de línea).
[abc]: coincidir con a, b o c.
[^abc]: coincidir con todo menos con a, b o
c.
Recuerda que para crear una expresión regular que contenga escapar la la cadena, por lo que debes escribir “\d”o “\s”.
Utilizar una clase de carácter que contenga en su interior un solo carácter puede ser una buena alternativa a la barra invertida cuando quieras incluir un solo metacaracter en la expresión regular. Muchas personas encuentran que así es más fácil de leer.
# Buscar de forma literal un caracter que usualmente tiene un significado especial en una expresión regular
str_view(c("abc", "a.c", "a*c", "a c"), "a[.]c")
## [2] │ <a.c>
str_view(c("abc", "a.c", "a*c", "a c"), ".[*]c")
## [3] │ <a*c>
str_view(c("abc", "a.c", "a*c", "a c"), "a[ ]")
## [4] │ <a >c
Esto funciona para la mayoría (pero no para todos) los metacaracteres de las expresiones regulares: $ . | ? * + ( ) [ { . Desafortunadamente, existen unos pocos caracteres que tienen un significado especial incluso dentro de una clase de caracteres y deben manejarse con barras invertidas para escaparlos: ] ^ y - .
Puedes utilizar una disyunción para elegir entre uno más patrones alternativos. Por ejemplo, abc|d..a concidirá tanto con ‘“abc”’, como con “duna”. Ten en cuenta que la precedencia de | es baja, por lo que abc|xyz coincidirá con abc o xyz, no con abcyz o abxyz. Al igual que en expresiones matemáticas, si el valor de | se vuelve confuso, utiliza paréntesis para dejar claro qué es lo que quieres:
str_view(c("cómo", "como"), "c(ó|o)mo")
## [1] │ <cómo>
## [2] │ <como>
palabras <- datos::palabras
str_subset(palabras, "^[aáeéiíoóuúü]")
## [1] "a" "abril" "acción" "acciones"
## [5] "acerca" "actitud" "actividad" "actividades"
## [9] "acto" "actual" "acuerdo" "adelante"
## [13] "además" "administración" "afirmó" "agua"
## [17] "ahí" "ahora" "aire" "al"
## [21] "algo" "alguien" "algún" "alguna"
## [25] "algunas" "algunos" "allá" "allí"
## [29] "alrededor" "alta" "alto" "ambiente"
## [33] "ambos" "américa" "amigo" "amigos"
## [37] "amor" "análisis" "animales" "ante"
## [41] "anterior" "antes" "antonio" "año"
## [45] "años" "aparece" "apenas" "apoyo"
## [49] "aquel" "aquella" "aquellas" "aquellos"
## [53] "aquí" "área" "argentina" "armas"
## [57] "arriba" "arte" "artículo" "así"
## [61] "asimismo" "asociación" "aspecto" "aspectos"
## [65] "asunto" "atención" "atrás" "aumento"
## [69] "aun" "aún" "aunque" "autor"
## [73] "autoridades" "ayer" "ayuda" "e"
## [77] "economía" "económica" "económico" "edad"
## [81] "educación" "efecto" "efectos" "ejemplo"
## [85] "ejército" "el" "él" "elecciones"
## [89] "electoral" "elementos" "ella" "ellas"
## [93] "ello" "ellos" "embargo" "empresa"
## [97] "empresas" "en" "encima" "encontrar"
## [101] "encuentra" "encuentran" "encuentro" "energía"
## [105] "enero" "enfermedad" "entonces" "entrada"
## [109] "entrar" "entre" "época" "equipo"
## [113] "era" "eran" "es" "esa"
## [117] "esas" "escuela" "ese" "esfuerzo"
## [121] "eso" "esos" "espacio" "españa"
## [125] "español" "española" "españoles" "especial"
## [129] "especialmente" "especie" "espera" "esta"
## [133] "está" "ésta" "estaba" "estaban"
## [137] "estado" "estados" "estamos" "están"
## [141] "estar" "estas" "este" "éste"
## [145] "estilo" "esto" "estos" "estoy"
## [149] "estructura" "estudio" "estudios" "estuvo"
## [153] "etapa" "etc" "europa" "europea"
## [157] "evitar" "ex" "existe" "existen"
## [161] "existencia" "éxito" "experiencia" "explicó"
## [165] "expresión" "exterior" "i" "iba"
## [169] "idea" "ideas" "iglesia" "igual"
## [173] "ii" "imagen" "imágenes" "importancia"
## [177] "importante" "importantes" "imposible" "incluso"
## [181] "industria" "información" "informe" "instituciones"
## [185] "instituto" "interés" "intereses" "interior"
## [189] "internacional" "investigación" "ir" "izquierda"
## [193] "o" "objetivo" "objeto" "obra"
## [197] "obras" "obstante" "ocasión" "ocasiones"
## [201] "ocho" "octubre" "oficial" "ojos"
## [205] "operación" "opinión" "oposición" "orden"
## [209] "organización" "origen" "oro" "otra"
## [213] "otras" "otro" "otros" "u"
## [217] "última" "último" "últimos" "un"
## [221] "una" "unas" "única" "único"
## [225] "unidad" "unidos" "unión" "universidad"
## [229] "uno" "unos" "uso" "usted"
palabras <- datos::palabras
str_view(palabras, "^[^aáeéiíoóuúü]+$", match = TRUE)
## [76] │ <b>
## [93] │ <c>
## [194] │ <d>
## [378] │ <g>
## [461] │ <j>
## [509] │ <m>
## [590] │ <n>
## [646] │ <p>
## [718] │ <pp>
## [785] │ <r>
## [814] │ <s>
## [996] │ <y>
palabras <- datos::palabras
str_view(palabras, "[^i]ón$", match = TRUE)
## [168] │ cora<zón>
## [788] │ ra<zón>
palabras <- datos::palabras
str_view(palabras, "(n|a)do", match = TRUE)
## [181] │ cua<ndo>
## [196] │ d<ado>
## [214] │ demasi<ado>
## [317] │ est<ado>
## [318] │ est<ado>s
## [353] │ ferna<ndo>
## [360] │ fo<ndo>
## [386] │ gr<ado>
## [407] │ hacie<ndo>
## [477] │ l<ado>
## [493] │ llam<ado>
## [495] │ lleg<ado>
## [546] │ merc<ado>
## [587] │ mu<ndo>
## [669] │ pas<ado>
## [805] │ result<ado>
## [806] │ result<ado>s
## [836] │ segu<ndo>
## [858] │ sie<ndo>
## [935] │ trabaj<ado>res
No necesariamente. Si revisamos todas las palabras en el conjunto de datos, encontramos que la mayoría de las palabras que contienen una ‘q’ están seguidas de una ‘u’. Sin embargo, existen excepciones, como ‘qüestió’ en catalán, ‘qi’ en pinyin chino, o palabras de origen extranjero como ‘Qatar’ o ‘Iraq’ que no siguen esta regla ortográfica del español. Por lo tanto, aunque es una convención común en el idioma español, no siempre a una ‘q’ le sigue una ‘u’ en todas las palabras.
palabras <- datos::palabras
str_subset(palabras, "q.")
## [1] "aquel" "aquella" "aquellas" "aquellos" "aquí" "aunque"
## [7] "cualquier" "equipo" "izquierda" "pequeña" "pequeño" "porque"
## [13] "que" "qué" "queda" "quedó" "quería" "quien"
## [19] "quién" "quienes" "quiere" "quiero" "quizá" "siquiera"
str_subset(palabras, "q[^u]")
## character(0)
# Definimos un vector con algunos verbos en segunda persona plural usando voseo
voseo_segunda_persona <- c("habláis", "vivís", "coméis", "bebéis", "miráis")
# Buscamos verbos que terminan en "ís" usando voseo
str_view(voseo_segunda_persona, "ís$", match = TRUE)
## [2] │ viv<ís>
# Definimos el vector de números de teléfono en formato peruano
telefonos_peru <- c("+51 912 887 904", "+51912887904", "+51 912887904")
# Buscamos el patrón de números de teléfono en el formato especificado para Perú
str_view(telefonos_peru, "\\+51 \\d{3} \\d{3} \\d{3}")
## [1] │ <+51 912 887 904>
words <- stringr::words
str_subset(words, "cie")
## [1] "science" "society"
str_subset(words, "[^c]ei")
## [1] "weigh"
str_subset(words, "[^c]ie|cei")
## [1] "achieve" "believe" "brief" "client" "die"
## [6] "experience" "field" "friend" "lie" "piece"
## [11] "quiet" "receive" "tie" "view"