FUNCIONES LIBRERIA DPLYR

INTRODUCCIÓN.

En el presente artículo realizaremos una serie de ejercicios sobre manipulación de datos y uso de funciones del paquete “dplyr” en R, realizados por estudiantes de la Facultad de Ciencias Económicas, carrera de Estadística de la Universidad Central del Ecuador, estos programas nos será de ayuda para nuestro aprendizaje.

FUNCIÓN SELECT, FILTER, ETC.

  • EJERCICIO #01.

Seleccionamos las 3 primeras columnas del dataset mtcars y mostramos la cabecera

library(dplyr)
mtcars%>%select(mpg, cyl, disp)%>%head
##                    mpg cyl disp
## Mazda RX4         21.0   6  160
## Mazda RX4 Wag     21.0   6  160
## Datsun 710        22.8   4  108
## Hornet 4 Drive    21.4   6  258
## Hornet Sportabout 18.7   8  360
## Valiant           18.1   6  225
  • EJERCICIO #02.

Utiliza la ayuda ?select_helpers para que observes el resultado. ?select_helpers

  • EJERCICIO #03.

Seleccionar las columnas que empiezan por d

mtcars%>%select(starts_with("d"))%>%head
##                   disp drat
## Mazda RX4          160 3.90
## Mazda RX4 Wag      160 3.90
## Datsun 710         108 3.85
## Hornet 4 Drive     258 3.08
## Hornet Sportabout  360 3.15
## Valiant            225 2.76
  • EJERCICIO #04.

Seleccionar las columnas que terminan por p

mtcars%>%select(ends_with("p"))%>%head
##                   disp  hp
## Mazda RX4          160 110
## Mazda RX4 Wag      160 110
## Datsun 710         108  93
## Hornet 4 Drive     258 110
## Hornet Sportabout  360 175
## Valiant            225 105
  • EJERCICIO #05.
head(select(mtcars, -drat, -am ))
##                    mpg cyl disp  hp    wt  qsec vs gear carb
## Mazda RX4         21.0   6  160 110 2.620 16.46  0    4    4
## Mazda RX4 Wag     21.0   6  160 110 2.875 17.02  0    4    4
## Datsun 710        22.8   4  108  93 2.320 18.61  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.215 19.44  1    3    1
## Hornet Sportabout 18.7   8  360 175 3.440 17.02  0    3    2
## Valiant           18.1   6  225 105 3.460 20.22  1    3    1

(Explica que resultado obtienes ?)

Obtengo la data de mtcars, menos 2 columnas que son: drat y am

  • EJERCICIO #06.
head(select(mtcars, contains("a")))
##                   drat am gear carb
## Mazda RX4         3.90  1    4    4
## Mazda RX4 Wag     3.90  1    4    4
## Datsun 710        3.85  1    4    1
## Hornet 4 Drive    3.08  0    3    1
## Hornet Sportabout 3.15  0    3    2
## Valiant           2.76  0    3    1

(Explica que resultado obtienes ?)

Obtengo la data de mtcars, especificamente las columnas cuyo nombre contengan la letra “a”.

  • EJERCICIO #07.
head(filter(mtcars, mpg > 20, gear == 4))
##                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4     21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710    22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Merc 240D     24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230      22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Fiat 128      32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1

(Explica que resultado obtienes ?)

Obtengo la data de mtcars con condiciones en dos columnas que son: mpg mayores a 20 y gear iguales a 4

  • EJERCICIO #08.

Seleccionar los sujetos con tipo de transmisión (am) 1 que, además, tienen 6 cilindros o menos

mtcars%>%
  select(am, cyl)%>%
  filter(am==1 & cyl <=6)%>%head
##                am cyl
## Mazda RX4       1   6
## Mazda RX4 Wag   1   6
## Datsun 710      1   4
## Fiat 128        1   4
## Honda Civic     1   4
## Toyota Corolla  1   4
  • EJERCICIO #09.

Seleccionar los sujetos que bien consumen menos de 21 mpg o bien tienen menos de 3 carburantes (carb) y menos de 4 engranajes (gear)

mtcars%>%select(mpg, carb, gear)%>%
  filter(mpg<21 | carb <3 & gear <4)%>%head
##                    mpg carb gear
## Hornet 4 Drive    21.4    1    3
## Hornet Sportabout 18.7    2    3
## Valiant           18.1    1    3
## Duster 360        14.3    4    3
## Merc 280          19.2    4    4
## Merc 280C         17.8    4    4
  • EJERCICIO #10.

Ordena por cilindrada (cyl) y por desplazamiento (disp)

mtcars%>%select(cyl, disp, everything())%>%head
##                   cyl disp  mpg  hp drat    wt  qsec vs am gear carb
## Mazda RX4           6  160 21.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       6  160 21.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          4  108 22.8  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      6  258 21.4 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   8  360 18.7 175 3.15 3.440 17.02  0  0    3    2
## Valiant             6  225 18.1 105 2.76 3.460 20.22  1  0    3    1
  • EJERCICIO #11.

Crea una nueva columna que indique los kilogramos que pesa el coche, sabiendo que 1 libra = 0.45 kg. La variable wt indica el peso en libras.

mutate(mtcars, kilogramos= wt*0.45)%>%head
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb kilogramos
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4    1.17900
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4    1.29375
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1    1.04400
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1    1.44675
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2    1.54800
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1    1.55700
  • EJERCICIO #12.

La función summarise() agrupa los valores en una tabla de acuerdo a la función que indiquemos. Calcula la media de disp usando la función summarise:

mtcars%>%summarise(media_disp= mean(disp))%>%head
##   media_disp
## 1   230.7219
  • EJERCICIO #13.
summarise(group_by(mtcars, cyl), max = max(disp))
## # A tibble: 3 x 2
##     cyl   max
##   <dbl> <dbl>
## 1     4  147.
## 2     6  258 
## 3     8  472

(Explica que resultado obtienes ?)

Obtengo los valores maximos por cilindrada.

  • EJERCICIO #14.
mtcars%>%select(mpg:disp)%>%head
##                    mpg cyl disp
## Mazda RX4         21.0   6  160
## Mazda RX4 Wag     21.0   6  160
## Datsun 710        22.8   4  108
## Hornet 4 Drive    21.4   6  258
## Hornet Sportabout 18.7   8  360
## Valiant           18.1   6  225

(Explica que resultado obtienes ?)

Obtengo la data de mtcars con las columnas: mpg hasta disp

  • EJERCICIO #15.
head(select(select(mtcars, contains("a")), -drat, -am)) 
##                   gear carb
## Mazda RX4            4    4
## Mazda RX4 Wag        4    4
## Datsun 710           4    1
## Hornet 4 Drive       3    1
## Hornet Sportabout    3    2
## Valiant              3    1

(Explica que resultado obtienes ?) Obtengo las columnas de la data mtcars que contengan la letra “a” en su nombre, menos la columna drat y am.

  • EJERCICIO #16.

Utilizando pipes ejecuta el ejercicio 15

mtcars%>%select(contains("a"))%>%select(-drat, -am)%>%head
##                   gear carb
## Mazda RX4            4    4
## Mazda RX4 Wag        4    4
## Datsun 710           4    1
## Hornet 4 Drive       3    1
## Hornet Sportabout    3    2
## Valiant              3    1
  • EJERCICIO #17.
mtcars_filtered = filter(mtcars, wt > 1.5)

Obtengo la data de mtcars filtrada por la columna “wt” que sea mayor a 1.5

mtcars_grouped = group_by(mtcars_filtered, cyl)

Obtengo la data de mtcars agrupada por cilindrada y filtrada por la columna “wt” mayor a 1.5

summarise(mtcars_grouped, mn = mean(mpg), sd = sd(mpg)) 
## # A tibble: 3 x 3
##     cyl    mn    sd
##   <dbl> <dbl> <dbl>
## 1     4  26.7  4.51
## 2     6  19.7  1.45
## 3     8  15.1  2.56

Obtengo la media y la desviacion estandar de la columna “mpg”, agrupadas por la variable cilindrada.

  • EJERCICIO #18.

Utilizando pipes ejecuta el ejercicio 17

mtcars%>%
  filter(wt> 1.5)%>%
  group_by(cyl)%>%
  summarise(mn=mean(mpg), sd=sd(mpg))
## # A tibble: 3 x 3
##     cyl    mn    sd
##   <dbl> <dbl> <dbl>
## 1     4  26.7  4.51
## 2     6  19.7  1.45
## 3     8  15.1  2.56
  • EJERCICIO #19.

Es obligatorio utilizar las funciones del paquete dplyr y recomendable utilizar pipes %>% para los siguientes ejercicios

  • EJERCICIO #20.

Descarga el fichero de datos vuelos.csv situado en http://gauss.inf.um.es/datos/; en local o localiza la url donde se encuentra

#Usamos la función "download.file" para descargar la data de la url.
download.file("https://gauss.inf.um.es/datos/vuelos.csv", "Vuelos.csv")
  • EJERCICIO #21.

Descarga el archivo y Guarda los datos en una variable llamada vuelos

vuelos<-read.table("vuelos.csv", header= T, sep=",")
  • EJERCICIO #22.

Selecciona los vuelos con destino SFO u OAK utilizando las funciones del paquete dplyr. ¿Con cuantos vuelos nos quedamos?

vuelos%>%select(dest)%>%
  filter(dest=="SFO" | dest=="OAK")%>%count()%>%head
##      n
## 1 1121
  • EJERCICIO #23.

Selecciona los vuelos que se han retrasado más de una hora. ¿Cuál es el destino que más se retrasa en proporción al número de vuelos?

vuelos%>%select(dest, dep_delay)%>%
  filter(dep_delay >60)%>%
  group_by(dest)%>%
  summarise(destino_retraso= n_distinct(dep_delay))%>%head
## # A tibble: 6 x 2
##   dest  destino_retraso
##   <chr>           <int>
## 1 ABQ                28
## 2 AEX                13
## 3 AMA                11
## 4 ASE                 6
## 5 ATL               105
## 6 AUS                49
  • EJERCICIO #24.

Encuentra 4 maneras diferentes de utilizar la función select para seleccionar las variables relacionadas con los retrasos (delay)

select(vuelos, dep_delay, arr_delay)%>%head
##   dep_delay arr_delay
## 1         0       -10
## 2         1        -9
## 3        -8        -8
## 4         3         3
## 5         5        -3
## 6        -1        -7
select(vuelos, contains("delay"))%>%head
##   dep_delay arr_delay
## 1         0       -10
## 2         1        -9
## 3        -8        -8
## 4         3         3
## 5         5        -3
## 6        -1        -7
vuelos%>%select(dep_delay, arr_delay)%>%head
##   dep_delay arr_delay
## 1         0       -10
## 2         1        -9
## 3        -8        -8
## 4         3         3
## 5         5        -3
## 6        -1        -7
vuelos%>%select(6,7)%>%head
##   dep_delay arr_delay
## 1         0       -10
## 2         1        -9
## 3        -8        -8
## 4         3         3
## 5         5        -3
## 6        -1        -7
  • EJERCICIO #25.

Agrupa los vuelos por fecha y calcula: media, mediana y cuartil 75 de los retrasos en los vuelos por hora

vuelos%>%
  select(date, hour, dep_delay)%>%
  group_by(date)%>%
  summarise(media= mean(dep_delay, na.rm=T), 
            mediana= median(dep_delay, na.rm=T),
            cuartil_75= quantile(dep_delay, 0.75, na.rm=T))%>%head
## # A tibble: 6 x 4
##   date       media mediana cuartil_75
##   <chr>      <dbl>   <dbl>      <dbl>
## 1 2011-01-01 10.7        3       15  
## 2 2011-01-02 15.7        7       20  
## 3 2011-01-03 13.4        4       18  
## 4 2011-01-04 11.9        5       18  
## 5 2011-01-05  6.33       1        8.5
## 6 2011-01-06  5.28       0        7
  • EJERCICIO #26.

Utilizando pipes calcula la media de retraso en los vuelos por día y hora, la cantidad de vuelos por día y hora y luego muestra solo los casos para los cuales haya más de 10

vuelos%>%select(dep_delay, date, hour, flight)%>%
  filter(flight> 10)%>%
  group_by(date)%>%
  summarise(media_retraso= mean(dep_delay, na.rm=T),
            cantidad_vuelos_x_dia= n_distinct(flight))%>%head
## # A tibble: 6 x 3
##   date       media_retraso cantidad_vuelos_x_dia
##   <chr>              <dbl>                 <int>
## 1 2011-01-01         10.6                    531
## 2 2011-01-02         15.7                    649
## 3 2011-01-03         13.6                    668
## 4 2011-01-04         12.0                    554
## 5 2011-01-05          6.42                   561
## 6 2011-01-06          5.34                   629
  • EJERCICIO #27.

Importar la base de datos realizada en MYSQL a R (Consultarlo como hacerlo)

  1. Usamos el paquete “RODBC” para poder trabajar con conexiones sql.

install.packages(“RODBC”) library(RODBC)

  1. Establecemos una conexón de MYSQL a R e importamos y leemos la data de vuelos.
library(RODBC)
conexion<- odbcConnect("DATABASE_DANIEL", uid= "root", pwd= "Wd1998@10")
vuelos1<- sqlQuery(conexion, "SELECT * FROM daniel.vuelos1")
head(vuelos1)
##         date hour minute  dep  arr dep_delay arr_delay carrier flight dest
## 1 01/01/2011   14      0 1400 1500         0       -10      AA    428  DFW
## 2 02/01/2011   14      1 1401 1501         1        -9      AA    428  DFW
## 3 03/01/2011   13     52 1352 1502        -8        -8      AA    428  DFW
## 4 04/01/2011   14      3 1403 1513         3         3      AA    428  DFW
## 5 05/01/2011   14      5 1405 1507         5        -3      AA    428  DFW
## 6 06/01/2011   13     59 1359 1503        -1        -7      AA    428  DFW
##    plane cancelled time dist
## 1 N576AA         0   40  224
## 2 N557AA         0   45  224
## 3 N541AA         0   48  224
## 4 N403AA         0   39  224
## 5 N492AA         0   44  224
## 6 N262AA         0   45  224