domingo, 16 de febrero de 2020

Usos del paquete ‘magrittr’

Introducción

El paquete magrittr ayuda a hacer fluido el proceso de análisis de datos. Algunas de sus funciones y operadores han sido incorporados en los paquetes que componen el ecosistema tidyverse. Pero otros no. Veamos cómo podemos obtener provecho de las funciones y operadores de este paquete. Alunos de los ejemplos son tomados de la ayuda del propio paquete, otros de algunos videos y, finalmente, otros ejemplos los he elaborado empleando mi propia data.

Generalidades

Emplear la aproximación ‘pipelines’ facilita seguir los procedimientos necesarios para obtener un resultado dado. Por ejemplo, si quiero obtener un subconjunto de datos de marco mtcars, con casos en los que la variable hp sea mayor a 100, agregar esa información de acuerdo con el número de cilindros, aplicar la media, redondear el resultado, cada uno de estos pasos habría que hacerlos por separado, o anidar parte del ellos. En ese caso, se hace difícil rastrear, dependiendo de la cantidad de operaciones, la secuencia. Con magrittr se puede obtener un procedimiento no sólo más sencillo sino, más importante, más legible:

##   cyl   mpg   disp     hp drat   wt  qsec   vs   am gear carb       kpl
## 1   4 25.90 108.05 111.00 3.94 2.15 17.75 1.00 1.00 4.50 2.00 11.010090
## 2   6 19.74 183.31 122.29 3.59 3.12 17.98 0.57 0.43 3.86 3.43  8.391474
## 3   8 15.10 353.10 209.21 3.23 4.00 16.77 0.00 0.14 3.29 3.50  6.419010

Las funciones anónimas pueden compactarse y hacerse mucho más fáciles de leer y seguir también.

Digamos que quiero obtener la primera y última línea de un marco de datos, si ese marco tiene más de 2 filas, y juntar ambos resultados:

##   cyl mpg disp  hp drat wt qsec vs am gear carb     kpl
## 1   4  26  108 111    4  2   18  1  1    4    2 11.0526
## 3   8  15  350 192    3  4   17  0  0    3    4  6.3765
##   cyl mpg disp  hp drat wt qsec vs am gear carb     kpl
## 1   4  26  108 111    4  2   18  1  1    4    2 11.0526
## 3   8  15  350 192    3  4   17  0  0    3    4  6.3765

Operadores

Entre los operadores de magritrr tenemos el archiconocido %>%, forward-pipe operator, empleados en el contexto de tidyverse, y otros menos conocidos como son %T>%, Tee operator, %<>%, compound assignment pipe-operator, y %$%, exposition pipe-operator. Empecemos con los que se suelen emplear menos.

operador “Tee”, permite ‘guardar’ resultados u operaciones que se usan en una función dada, la que normalmente no genera resultados adicionales, para emplearlos en otra función, por ejemplo

##  NULL

No puedo obtener la descripción de la matriz porque la función plot no ‘guarda’ los datos con los que se ha hecho la gráfica y, por tanto, no puede crearse una nueva función con esos datos. Entonces

##  num [1:50, 1:2] -0.82 0.518 0.045 -1.837 1.027 ...

Otro ejemplo:

## [1]  9.517984 19.808562

Entonces, el operador Tee nos permite reutilizar los resultados que hemos incluído en una operación anterior, en este caso, la data de la matriz, y usarlos con la función plot, que normalmente no devuelve resultados adicionales. El operador tee también puede usarse con funciones tales como printing, logging y otras que generalmente no nos permiten ‘recuperar’ los datos empleados en ellas.

El operador de exposición nos permite extraer una variable dada y a partir de ella, no del dataset, hacer los análisis requeridos

## [1] 0.3361992

Este operador es similar a la idea que usamos cuando incluimos la función with. Nos permite emplear en un ambiente ‘pipe’ funciones que normalmente no podrían ser incluída por sus carcterísticas específicas.

El operador de asignación nos permite agregar a la data inicial los resultados del proceso que viene a la derecha de los datos

##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

El operador permite añadir el resultado de la operación que se va a calcular al valor o valores que están a la izquierda. Se usa cada vez que queramos emplear <-

## # A tibble: 6 x 2
##   fecha      titulos                          
##   <date>     <chr>                            
## 1 2009-01-22 1ra Entrega                      
## 2 2009-01-25 La Cuarta Fase El Despliegue     
## 3 2009-01-28 Ganó el Si                       
## 4 2009-01-29 Caballeria                       
## 5 2009-02-01 Febrero Otra vez Febrero         
## 6 2009-02-03 Quinta Fase Doble Ataque Blindado
## # A tibble: 6 x 5
##   fecha      titulos                            anio mes     dia
##   <date>     <chr>                             <dbl> <chr> <int>
## 1 2009-01-22 1ra Entrega                        2009 ene      22
## 2 2009-01-25 La Cuarta Fase El Despliegue       2009 ene      25
## 3 2009-01-28 Ganó el Si                         2009 ene      28
## 4 2009-01-29 Caballeria                         2009 ene      29
## 5 2009-02-01 Febrero Otra vez Febrero           2009 feb       1
## 6 2009-02-03 Quinta Fase Doble Ataque Blindado  2009 feb       3

Otro ejemplo

## [[1]]
## [1] "20090122"    "1ra Entrega"
## 
## [[2]]
## [1] "20090125"                     "La Cuarta Fase El Despliegue"
## 
## [[3]]
## [1] "20090128"   "Ganó el Si"
## 
## [[4]]
## [1] "20090129"   "Caballeria"
## 
## [[5]]
## [1] "20090201"                 "Febrero Otra vez Febrero"
## 
## [[6]]
## [1] "20090203"                          "Quinta Fase Doble Ataque Blindado"
##  [1] "1ra Entrega"                                  
##  [2] "La Cuarta Fase El Despliegue"                 
##  [3] "Ganó el Si"                                   
##  [4] "Caballeria"                                   
##  [5] "Febrero Otra vez Febrero"                     
##  [6] "Quinta Fase Doble Ataque Blindado"            
##  [7] "4 de Febrero"                                 
##  [8] "La Maisantera La  Vida Bonita El  Amor Bonito"
##  [9] "Construyendo Diginidad"                       
## [10] "Una cita con el Futuro"                       
## [11] "Hoy  15 de Febrero Ser o no Ser"              
## [12] "27F El Parto Revolucionario"

Extraigo la segunda parte de la lista de títulos

##  [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
##  [1] 1.618641 1.695582 1.523155 1.793042 1.854724 1.860108 1.889444 1.786057
##  [9] 1.774824 1.854724 1.854724 2.017424 1.931321 1.944222 2.291288 2.328948
## [17] 2.311926 1.483240 1.270827 1.354622 1.570032 1.876166 1.853375 1.959592
## [25] 1.960867 1.391043 1.462874 1.230041 1.780449 1.664332 1.889444 1.667333

Si quiero crear un gráfico de barras con las categorias de una variable, normalmente procedo de la siguiente forma:

con magrittr el procedimiento seria:

##                              wt
## Mazda RX4           -0.76240831
## Mazda RX4 Wag       -0.82186333
## Datsun 710          -0.62961370
## Hornet 4 Drive      -0.84001284
## Hornet Sportabout   -0.81677899
## Valiant             -0.81326145
## Duster 360          -0.78927570
## Merc 240D           -0.84083749
## Merc 230            -0.84145189
## Merc 280            -0.81677899
## Merc 280C           -0.81677899
## Merc 450SE          -0.56390764
## Merc 450SL          -0.73916227
## Merc 450SLC         -0.71947484
## Cadillac Fleetwood   0.48999627
## Lincoln Continental  0.60761534
## Chrysler Imperial    0.55740136
## Fiat 128            -0.55511492
## Honda Civic         -0.04417490
## Toyota Corolla      -0.25818270
## Toyota Corona       -0.70307373
## Dodge Challenger    -0.80117386
## AMC Javelin         -0.81761934
## Camaro Z28          -0.69316234
## Pontiac Firebird    -0.69083455
## Fiat X1-9           -0.34872027
## Porsche 914-2       -0.51324494
## Lotus Europa         0.05773204
## Ford Pantera L      -0.84125293
## Ferrari Dino        -0.80266506
## Maserati Bora       -0.78927570
## Volvo 142E          -0.80479772

Este procedimiento también habría sido posible con:

Combinando con placeholder:

Aliases

Magrittr contiene una serie de “alias” que facilitan las operaciones matemáticas y otras operaciones.

## [[1]]
## [1] "20090122"    "1ra Entrega"
## 
## [[2]]
## [1] "20090125"                     "La Cuarta Fase El Despliegue"
## 
## [[3]]
## [1] "20090128"   "Ganó el Si"
## 
## [[4]]
## [1] "20090129"   "Caballeria"
## 
## [[5]]
## [1] "20090201"                 "Febrero Otra vez Febrero"
## 
## [[6]]
## [1] "20090203"                          "Quinta Fase Doble Ataque Blindado"
## [[1]]
## [1] "20090125"                     "La Cuarta Fase El Despliegue"
## [1] "20090125"
## [[1]]
## [1] "20090125"                     "La Cuarta Fase El Despliegue"
## [1] "20090125"                     "La Cuarta Fase El Despliegue"
## # A tibble: 102 x 1
##    mes  
##    <chr>
##  1 ene  
##  2 ene  
##  3 ene  
##  4 ene  
##  5 feb  
##  6 feb  
##  7 feb  
##  8 feb  
##  9 feb  
## 10 feb  
## # ... with 92 more rows
## # A tibble: 102 x 1
##    mes  
##    <chr>
##  1 ene  
##  2 ene  
##  3 ene  
##  4 ene  
##  5 feb  
##  6 feb  
##  7 feb  
##  8 feb  
##  9 feb  
## 10 feb  
## # ... with 92 more rows
##   [1] "ene"  "ene"  "ene"  "ene"  "feb"  "feb"  "feb"  "feb"  "feb"  "feb" 
##  [11] "feb"  "mar"  "mar"  "mar"  "mar"  "mar"  "abr"  "abr"  "abr"  "may" 
##  [21] "may"  "may"  "may"  "jun"  "jun"  "jun"  "jun"  "jul"  "jul"  "jul" 
##  [31] "jul"  "ago"  "ago"  "ago"  "ago"  "ago"  "sept" "sept" "sept" "sept"
##  [41] "oct"  "oct"  "oct"  "oct"  "nov"  "nov"  "nov"  "nov"  "nov"  "dic" 
##  [51] "dic"  "dic"  "ene"  "ene"  "ene"  "ene"  "ene"  "feb"  "feb"  "feb" 
##  [61] "feb"  "mar"  "mar"  "mar"  "abr"  "abr"  "abr"  "abr"  "may"  "may" 
##  [71] "may"  "may"  "may"  "jun"  "jun"  "jun"  "jul"  "jul"  "jul"  "jul" 
##  [81] "jul"  "ago"  "ago"  "ago"  "ago"  "sept" "sept" "sept" "oct"  "oct" 
##  [91] "oct"  "oct"  "nov"  "nov"  "nov"  "nov"  "dic"  "dic"  "dic"  "dic" 
## [101] "ene"  "ene"
##   [1] 45 51 57 59  3  7 11 17 21 25 31  3 21 31 45 59 11 25 53  7 21 49 63 15 29
##  [26] 43 57 11 25 39 53  5 19 33 47 61 13 27 41 55  9 23 39 51  3 17 31 45 59 13
##  [51] 27 41  5 21 35 49 63 15 29 43 57 15 29 49  9 23 37 47  5 19 33 47 59 11 39
##  [76] 53  7 21 37 51 63 15 29 45 57 11 25 39  5 21 49 63 13 29 43 57 11 25 37 53
## [101]  5 19

Algunas operaciones lógicas:

## # A tibble: 52 x 5
##    fecha      titulos                                        anio mes     dia
##    <date>     <chr>                                         <dbl> <chr> <int>
##  1 2009-01-22 1ra Entrega                                    2009 ene      22
##  2 2009-01-25 La Cuarta Fase El Despliegue                   2009 ene      25
##  3 2009-01-28 Ganó el Si                                     2009 ene      28
##  4 2009-01-29 Caballeria                                     2009 ene      29
##  5 2009-02-01 Febrero Otra vez Febrero                       2009 feb       1
##  6 2009-02-03 Quinta Fase Doble Ataque Blindado              2009 feb       3
##  7 2009-02-05 4 de Febrero                                   2009 feb       5
##  8 2009-02-08 La Maisantera La  Vida Bonita El  Amor Bonito  2009 feb       8
##  9 2009-02-10 Construyendo Diginidad                         2009 feb      10
## 10 2009-02-12 Una cita con el Futuro                         2009 feb      12
## # ... with 42 more rows
## # A tibble: 52 x 5
##    fecha      titulos                                        anio mes     dia
##    <date>     <chr>                                         <dbl> <chr> <int>
##  1 2009-01-22 1ra Entrega                                    2009 ene      22
##  2 2009-01-25 La Cuarta Fase El Despliegue                   2009 ene      25
##  3 2009-01-28 Ganó el Si                                     2009 ene      28
##  4 2009-01-29 Caballeria                                     2009 ene      29
##  5 2009-02-01 Febrero Otra vez Febrero                       2009 feb       1
##  6 2009-02-03 Quinta Fase Doble Ataque Blindado              2009 feb       3
##  7 2009-02-05 4 de Febrero                                   2009 feb       5
##  8 2009-02-08 La Maisantera La  Vida Bonita El  Amor Bonito  2009 feb       8
##  9 2009-02-10 Construyendo Diginidad                         2009 feb      10
## 10 2009-02-12 Una cita con el Futuro                         2009 feb      12
## # ... with 42 more rows
## # A tibble: 2 x 5
##   fecha      titulos         anio mes     dia
##   <date>     <chr>          <dbl> <chr> <int>
## 1 2011-01-02 Feliz Año 2011  2011 ene       2
## 2 2011-01-09 Abajo cadenas   2011 ene       9
## # A tibble: 71 x 5
##    fecha      titulos                              anio mes     dia
##    <date>     <chr>                               <dbl> <chr> <int>
##  1 2009-01-22 1ra Entrega                          2009 ene      22
##  2 2009-01-25 La Cuarta Fase El Despliegue         2009 ene      25
##  3 2009-01-28 Ganó el Si                           2009 ene      28
##  4 2009-01-29 Caballeria                           2009 ene      29
##  5 2009-02-10 Construyendo Diginidad               2009 feb      10
##  6 2009-02-12 Una cita con el Futuro               2009 feb      12
##  7 2009-02-15 Hoy  15 de Febrero Ser o no Ser      2009 feb      15
##  8 2009-03-10 La Mujer, La Mujer, La Mujer....txt  2009 mar      10
##  9 2009-03-15 La Crisis Perfecta                   2009 mar      15
## 10 2009-03-22 Venezuela La Contracrisis            2009 mar      22
## # ... with 61 more rows
## # A tibble: 100 x 5
##    fecha      titulos                                        anio mes     dia
##    <date>     <chr>                                         <dbl> <chr> <int>
##  1 2009-01-22 1ra Entrega                                    2009 ene      22
##  2 2009-01-25 La Cuarta Fase El Despliegue                   2009 ene      25
##  3 2009-01-28 Ganó el Si                                     2009 ene      28
##  4 2009-01-29 Caballeria                                     2009 ene      29
##  5 2009-02-01 Febrero Otra vez Febrero                       2009 feb       1
##  6 2009-02-03 Quinta Fase Doble Ataque Blindado              2009 feb       3
##  7 2009-02-05 4 de Febrero                                   2009 feb       5
##  8 2009-02-08 La Maisantera La  Vida Bonita El  Amor Bonito  2009 feb       8
##  9 2009-02-10 Construyendo Diginidad                         2009 feb      10
## 10 2009-02-12 Una cita con el Futuro                         2009 feb      12
## # ... with 90 more rows
## # A tibble: 66 x 5
##    fecha      titulos                                        anio mes     dia
##    <date>     <chr>                                         <dbl> <chr> <int>
##  1 2009-02-01 Febrero Otra vez Febrero                       2009 feb       1
##  2 2009-02-03 Quinta Fase Doble Ataque Blindado              2009 feb       3
##  3 2009-02-05 4 de Febrero                                   2009 feb       5
##  4 2009-02-08 La Maisantera La  Vida Bonita El  Amor Bonito  2009 feb       8
##  5 2009-02-10 Construyendo Diginidad                         2009 feb      10
##  6 2009-02-12 Una cita con el Futuro                         2009 feb      12
##  7 2009-02-15 Hoy  15 de Febrero Ser o no Ser                2009 feb      15
##  8 2009-03-01 27F El Parto Revolucionario                    2009 mar       1
##  9 2009-03-10 La Mujer, La Mujer, La Mujer....txt            2009 mar      10
## 10 2009-03-15 La Crisis Perfecta                             2009 mar      15
## # ... with 56 more rows
## # A tibble: 102 x 5
##    fecha      titulos                                        anio mes     dia
##    <date>     <chr>                                         <dbl> <chr> <int>
##  1 2009-01-22 1ra Entrega                                    2009 ene      22
##  2 2009-01-25 La Cuarta Fase El Despliegue                   2009 ene      25
##  3 2009-01-28 Ganó el Si                                     2009 ene      28
##  4 2009-01-29 Caballeria                                     2009 ene      29
##  5 2009-02-01 Febrero Otra vez Febrero                       2009 feb       1
##  6 2009-02-03 Quinta Fase Doble Ataque Blindado              2009 feb       3
##  7 2009-02-05 4 de Febrero                                   2009 feb       5
##  8 2009-02-08 La Maisantera La  Vida Bonita El  Amor Bonito  2009 feb       8
##  9 2009-02-10 Construyendo Diginidad                         2009 feb      10
## 10 2009-02-12 Una cita con el Futuro                         2009 feb      12
## # ... with 92 more rows