APLICANDO CONOCIMIENTOS ADQUIRIDOS ACERCA DE COMANDOS
En este documento se presentan 27 ejercicios de aprendizaje sobre el uso de comandos, para la comunidad de RStudio.
AUTORES
COLABORACIÓN
Utilizando la base de datos interna mtcars, resolver los siguientes enunciados:
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
EJERCICIO 1
- Seleccionamos las 3 primeras columnas del dataset mtcars y mostramos la cabecera.
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
## ✔ tibble 3.1.7 ✔ dplyr 1.0.9
## ✔ tidyr 1.2.0 ✔ stringr 1.4.0
## ✔ readr 2.1.2 ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
# Llamamos las librerias
head(select(mtcars, 1:3))
## 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 2
- Utiliza la ayuda ?select_helpers para que observes el resultado.
# ?select_helpers
EJERCICIO 3
- Seleccionar las columnas que empiezan por d.
head(select(mtcars, starts_with("d")))
## 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 4
- Seleccionar las columnas que terminan por p.
head(select(mtcars, ends_with("p")))
## 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 5
- head(select( mtcars, -drat, -am )) (Explica que resultado obtienes ?).
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
EXPLICACIÓN
Seleccina todas las columnas de mtcars a excepción de drat y am ya que están con el signo menos y quiere decir que elimina esas columnas.
EJERCICIO 6
- head(select( mtcars, contains(“a”))) (Explica que resultado obtienes ?).
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
EXPLICACIÓN
Selecciona todas aquellas columnas que contienen una letra “a” en sus encabezados.
EJERCICIO 7
- head(filter( mtcars, mpg > 20, gear == 4)) (Explica que resultado obtienes ?).
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
EXPLICACIÓN
Selecciona todos los datos, siempre y cuando estas cumplan con que la columna mpg sea mayor a 20 y la columna gear sea igual a 4.
EJERCICIO 8
- Seleccionar los sujetos con tipo de transmisión (am) 1 que, además, tienen 6 cilindros o menos.
head(filter(mtcars, am == 1, cyl <= 6))
## 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
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
EJERCICIO 9
- Seleccionar los sujetos que bien consumen menos de 21 mpg o bien tienen menos de 3 carburantes (carb) y menos de 4 engranajes (gear).
head(filter(mtcars, (mpg < 21 | carb < 3) & gear < 4))
## mpg cyl disp hp drat wt qsec vs am gear carb
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
EJERCICIO 10
- Ordena por cilindrada (cyl) y por desplazamiento (disp).
head(select(mtcars, cyl, disp, everything()))
## 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.
mtcars$kg <- (mtcars$wt*0.45)
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb kg
## 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:
grupo_disp <- group_by(mtcars, disp)
grupo_disp
## # A tibble: 32 × 12
## # Groups: disp [27]
## mpg cyl disp hp drat wt qsec vs am gear carb kg
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 1.18
## 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 1.29
## 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 1.04
## 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 1.45
## 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 1.55
## 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 1.56
## 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 1.61
## 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 1.44
## 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 1.42
## 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 1.55
## # … with 22 more rows
## # ℹ Use `print(n = ...)` to see more rows
summarise(grupo_disp, mean(disp))
## # A tibble: 27 × 2
## disp `mean(disp)`
## <dbl> <dbl>
## 1 71.1 71.1
## 2 75.7 75.7
## 3 78.7 78.7
## 4 79 79
## 5 95.1 95.1
## 6 108 108
## 7 120. 120.
## 8 120. 120.
## 9 121 121
## 10 141. 141.
## # … with 17 more rows
## # ℹ Use `print(n = ...)` to see more rows
EJERCICIO 13
- summarise(group_by(mtcars, cyl), max = max(disp)) (Explica que resultado obtienes ?).
summarise(group_by(mtcars, cyl), max = max(disp))
## # A tibble: 3 × 2
## cyl max
## <dbl> <dbl>
## 1 4 147.
## 2 6 258
## 3 8 472
EXPLICACIÓN
Agrupa los datos del cilindraje por su valor y obtiene el maximo de ese conjunto de datos.
EJERCICIO 14
- mtcars %>% select( mpg:disp )%>% head (Explica que resultado obtienes ?).
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
EXPLICACIÓN
Selecciona las columas desde mpg hasta disp y nos muestra los 6 primeros valores de esta.
EJERCICIO 15
- head(select(select(mtcars, contains(“a”)), -drat, -am)) (Explica que resultado obtienes ?).
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
EXPLICACIÓN
Selecciona las columnas que contengan una letra a en su encabezado a excepción de drat y am.
EJERCICIO 16
- Utilizando pipes ejecuta el ejercicio 15.
mtcars %>%
select((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
## Duster 360 3 4
## Merc 240D 4 2
## Merc 230 4 2
## Merc 280 4 4
## Merc 280C 4 4
## Merc 450SE 3 3
## Merc 450SL 3 3
## Merc 450SLC 3 3
## Cadillac Fleetwood 3 4
## Lincoln Continental 3 4
## Chrysler Imperial 3 4
## Fiat 128 4 1
## Honda Civic 4 2
## Toyota Corolla 4 1
## Toyota Corona 3 1
## Dodge Challenger 3 2
## AMC Javelin 3 2
## Camaro Z28 3 4
## Pontiac Firebird 3 2
## Fiat X1-9 4 1
## Porsche 914-2 5 2
## Lotus Europa 5 2
## Ford Pantera L 5 4
## Ferrari Dino 5 6
## Maserati Bora 5 8
## Volvo 142E 4 2
EJERCICIO 17
- mtcars_filtered = filter(mtcars, wt > 1.5) mtcars_grouped = group_by(mtcars_filtered, cyl) summarise(mtcars_grouped, mn = mean(mpg), sd = sd(mpg))(Explica que resultado obtienes ?).
mtcars_filtered = filter(mtcars, wt > 1.5)
mtcars_grouped = group_by(mtcars_filtered, cyl)
summarise(mtcars_grouped, mn = mean(mpg), sd = sd(mpg))
## # A tibble: 3 × 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
EXPLICACIÓN
Se obtiene la media y la desviación estándar de la columna mpg, agrupagas según su cilindraje y siempre y cuando su wt sea mayor a 1.5.
EJERCICIO 18
- Utilizando pipes ejecuta el ejercicio 17.
mtcars %>%
filter(wt > 1.5) %>%
group_by(cyl) %>%
summarise(mean(mpg), sd(mpg))
## # A tibble: 3 × 3
## cyl `mean(mpg)` `sd(mpg)`
## <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.
EJERCICIO 21
- Descarga el archivo y Guarda los datos en una variable llamada “vuelos”.
# file.choose()
vuelos <- read.csv("C:\\Users\\gaby_\\OneDrive\\Documentos\\Silabos de la U\\Tercer Semestre UCE\\PROGRAMACION\\TALLER 10\\vuelos.csv")
head(vuelos)
## date hour minute dep arr dep_delay arr_delay carrier flight dest
## 1 2011-01-01 14 0 1400 1500 0 -10 AA 428 DFW
## 2 2011-01-02 14 1 1401 1501 1 -9 AA 428 DFW
## 3 2011-01-03 13 52 1352 1502 -8 -8 AA 428 DFW
## 4 2011-01-04 14 3 1403 1513 3 3 AA 428 DFW
## 5 2011-01-05 14 5 1405 1507 5 -3 AA 428 DFW
## 6 2011-01-06 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
EJERCICIO 22
- Selecciona los vuelos con destino
SFO u OAK utilizando las funciones del paquete
dplyr. ¿Con cuántos vuelos nos quedamos?.
destinos <- vuelos %>%
select(dest) %>%
filter(dest == "SFO" | dest == "OAK") %>%
count()
head(destinos)
## n
## 1 1121
Nos quedamos con un total de 1121 vuelos con destino a SFO y OAK.
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?.
x <- select(vuelos, dest, arr_delay)
x <- filter(x, arr_delay >= 60)
x <- xtabs(x$arr_delay ~ x$dest + x$arr_delay)
head(x, 20)
## x$dest
## ABQ AEX AMA ASE ATL AUS AVL BFL BHM BNA BOS BRO BTR
## 4025 1274 1769 429 23255 6749 491 240 3963 5577 1438 1953 1794
## BWI CAE CHS CLE CLT CMH COS
## 3197 913 1726 1823 6081 1802 2209
atrasos <- data.frame(x)
head(atrasos)
## x.dest Freq
## 1 ABQ 4025
## 2 AEX 1274
## 3 AMA 1769
## 4 ASE 429
## 5 ATL 23255
## 6 AUS 6749
atrasosord <- arrange(atrasos, Freq)
head(atrasosord, 20)
## x.dest Freq
## 1 GRK 108
## 2 RNO 197
## 3 CRW 205
## 4 BFL 240
## 5 GUC 282
## 6 HDN 310
## 7 MLU 318
## 8 ASE 429
## 9 LCH 456
## 10 AVL 491
## 11 ORF 650
## 12 SJU 680
## 13 MFE 717
## 14 GSO 762
## 15 DAY 803
## 16 SNA 871
## 17 SJC 893
## 18 CAE 913
## 19 PBI 944
## 20 DCA 1011
max(atrasosord$Freq)
## [1] 23255
min(atrasosord$Freq)
## [1] 108
El destino con mayores retrasos en proporcion a los vuelos es Atlanta con un total de 23225 minutos de retrasos.
EJERCICIO 24
- Encuentra 4 maneras diferentes de
utilizar la función select para seleccionar las variables
relacionadas con los retrasos (delay).
head(select(vuelos, contains("delay")))
## dep_delay arr_delay
## 1 0 -10
## 2 1 -9
## 3 -8 -8
## 4 3 3
## 5 5 -3
## 6 -1 -7
head(select(vuelos, ends_with("delay")))
## dep_delay arr_delay
## 1 0 -10
## 2 1 -9
## 3 -8 -8
## 4 3 3
## 5 5 -3
## 6 -1 -7
head(select(vuelos, matches(".y")))
## dep_delay arr_delay
## 1 0 -10
## 2 1 -9
## 3 -8 -8
## 4 3 3
## 5 5 -3
## 6 -1 -7
head(select(vuelos, dep_delay, arr_delay))
## 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.
library("dplyr")
agfecha <- vuelos %>%
select(date, hour, arr_delay) %>%
group_by(date) %>%
summarise(media = mean(arr_delay, na.rm = T), mediana = median(arr_delay, na.rm = T), cuatil_75 = quantile(arr_delay, 0.75, na.rm = T))
head(agfecha)
## # A tibble: 6 × 4
## date media mediana cuatil_75
## <chr> <dbl> <dbl> <dbl>
## 1 2011-01-01 10.1 5 17
## 2 2011-01-02 10.5 3 17
## 3 2011-01-03 6.04 -2 10.5
## 4 2011-01-04 7.97 4 16
## 5 2011-01-05 4.17 -1 11
## 6 2011-01-06 6.07 2 13
EJERCICIO 26
- Utilizando pipes calcula la media de retraso en los vuelos por dia y hora, la cantidad de vuelos por dia y hora y luego muestra solo los casos para los cuales haya más de 10.
cvuelos <- vuelos %>%
select(date, hour, arr_delay, flight) %>%
filter(flight > 10) %>%
group_by(date) %>%
summarise(media_retraso = mean(arr_delay, na.rm = T),
cantidad_vuelos = n_distinct(flight))
head(cvuelos)
## # A tibble: 6 × 3
## date media_retraso cantidad_vuelos
## <chr> <dbl> <int>
## 1 2011-01-01 9.97 531
## 2 2011-01-02 10.5 649
## 3 2011-01-03 6.18 668
## 4 2011-01-04 8.07 554
## 5 2011-01-05 4.23 561
## 6 2011-01-06 6.17 629
EJERCICIO 27
- Importar la base de datos realizada en MYSQL a R (Consultarlo como hacerlo).
# install.packages("RODBC")
library("RODBC")
conexvuelos <- odbcConnect("ALEXACONX", uid = "root", pwd = "ALEXA@0499")
vuelos1 <- sqlQuery(conexvuelos, "SELECT * FROM gaby.`vuelos t10`")
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