FUNCIONES LIBRERIA DPLYR
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.
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
Utiliza la ayuda ?select_helpers para que observes el resultado. ?select_helpers
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
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
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
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”.
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
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
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
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
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
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
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.
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
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.
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
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.
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
Es obligatorio utilizar las funciones del paquete dplyr y recomendable utilizar pipes %>% para los siguientes ejercicios
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")
Descarga el archivo y Guarda los datos en una variable llamada vuelos
vuelos<-read.table("vuelos.csv", header= T, sep=",")
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
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
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
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
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
Importar la base de datos realizada en MYSQL a R (Consultarlo como hacerlo)
install.packages(“RODBC”) library(RODBC)
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