Practicar los cinco verbos principales de dplyr:
select(), filter(), mutate(),
arrange() y summarise().
Usaremos el dataset mtcars que viene incluido en R.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data(mtcars)
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
mpg,
hp, wt, am.hp > 100).# Escribe tu código aquí
mtcars2 <- select(mtcars, mpg, hp, wt, am)
filter(mtcars2,
hp > 100)
## mpg hp wt am
## Mazda RX4 21.0 110 2.620 1
## Mazda RX4 Wag 21.0 110 2.875 1
## Hornet 4 Drive 21.4 110 3.215 0
## Hornet Sportabout 18.7 175 3.440 0
## Valiant 18.1 105 3.460 0
## Duster 360 14.3 245 3.570 0
## Merc 280 19.2 123 3.440 0
## Merc 280C 17.8 123 3.440 0
## Merc 450SE 16.4 180 4.070 0
## Merc 450SL 17.3 180 3.730 0
## Merc 450SLC 15.2 180 3.780 0
## Cadillac Fleetwood 10.4 205 5.250 0
## Lincoln Continental 10.4 215 5.424 0
## Chrysler Imperial 14.7 230 5.345 0
## Dodge Challenger 15.5 150 3.520 0
## AMC Javelin 15.2 150 3.435 0
## Camaro Z28 13.3 245 3.840 0
## Pontiac Firebird 19.2 175 3.845 0
## Lotus Europa 30.4 113 1.513 1
## Ford Pantera L 15.8 264 3.170 1
## Ferrari Dino 19.7 175 2.770 1
## Maserati Bora 15.0 335 3.570 1
## Volvo 142E 21.4 109 2.780 1
power_weight_ratio que
sea hp / wt.# Escribe tu código aquí
mutate(mtcars2, power_weight_ratio = hp/wt)
## mpg hp wt am power_weight_ratio
## Mazda RX4 21.0 110 2.620 1 41.98473
## Mazda RX4 Wag 21.0 110 2.875 1 38.26087
## Datsun 710 22.8 93 2.320 1 40.08621
## Hornet 4 Drive 21.4 110 3.215 0 34.21462
## Hornet Sportabout 18.7 175 3.440 0 50.87209
## Valiant 18.1 105 3.460 0 30.34682
## Duster 360 14.3 245 3.570 0 68.62745
## Merc 240D 24.4 62 3.190 0 19.43574
## Merc 230 22.8 95 3.150 0 30.15873
## Merc 280 19.2 123 3.440 0 35.75581
## Merc 280C 17.8 123 3.440 0 35.75581
## Merc 450SE 16.4 180 4.070 0 44.22604
## Merc 450SL 17.3 180 3.730 0 48.25737
## Merc 450SLC 15.2 180 3.780 0 47.61905
## Cadillac Fleetwood 10.4 205 5.250 0 39.04762
## Lincoln Continental 10.4 215 5.424 0 39.63864
## Chrysler Imperial 14.7 230 5.345 0 43.03087
## Fiat 128 32.4 66 2.200 1 30.00000
## Honda Civic 30.4 52 1.615 1 32.19814
## Toyota Corolla 33.9 65 1.835 1 35.42234
## Toyota Corona 21.5 97 2.465 0 39.35091
## Dodge Challenger 15.5 150 3.520 0 42.61364
## AMC Javelin 15.2 150 3.435 0 43.66812
## Camaro Z28 13.3 245 3.840 0 63.80208
## Pontiac Firebird 19.2 175 3.845 0 45.51365
## Fiat X1-9 27.3 66 1.935 1 34.10853
## Porsche 914-2 26.0 91 2.140 1 42.52336
## Lotus Europa 30.4 113 1.513 1 74.68605
## Ford Pantera L 15.8 264 3.170 1 83.28076
## Ferrari Dino 19.7 175 2.770 1 63.17690
## Maserati Bora 15.0 335 3.570 1 93.83754
## Volvo 142E 21.4 109 2.780 1 39.20863
am).mpg y hp por
grupo.# Escribe tu código aquí
mtcars %>%
group_by(am) %>%
summarize(promedio_mpg = mean(mpg),
promedio_hp = mean(hp))
## # A tibble: 2 × 3
## am promedio_mpg promedio_hp
## <dbl> <dbl> <dbl>
## 1 0 17.1 160.
## 2 1 24.4 127.
Pregunta breve:
¿Qué diferencias observas entre transmisión automática (0) y manual
(1)?
Los carros con transmisión automática tienen menor promedio de mpg pero mayor de hp en comparación con los de transmisión manual.
Crear visualizaciones simples y obtener estadísticas descriptivas.
Seguimos usando mtcars.
library(ggplot2)
mpg.mpg por tipo de transmisión
(am).# Escribe tu código aquí
summarize(mtcars,
promedio_1_mpg = mean(mpg),
sd(mpg))
## promedio_1_mpg sd(mpg)
## 1 20.09062 6.026948
mtcars %>%
group_by(am) %>%
summarize(promedio_mpg = mean(mpg),
promedio_hp = mean(hp))
## # A tibble: 2 × 3
## am promedio_mpg promedio_hp
## <dbl> <dbl> <dbl>
## 1 0 17.1 160.
## 2 1 24.4 127.
mpg.mpg según tipo de transmisión
(am).wt vs mpg.# Escribe tu código aquí
ggplot(mtcars, aes(x = mpg)) +
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
ggplot(mtcars, aes(x = am, y = mpg)) +
geom_boxplot()
## Warning: Orientation is not uniquely specified when both the x and y aesthetics are
## continuous. Picking default orientation 'x'.
## Warning: Continuous x aesthetic
## ℹ did you forget `aes(group = ...)`?
ggplot(mtcars, aes(x = mpg, y = wt)) +
geom_point()
Pregunta breve:
¿Observas alguna relación entre peso (wt) y rendimiento de
gasolina (mpg)?
Practicar limpieza básica: valores perdidos, recodificación y estandarización.
Crearemos un pequeño dataset simulado.
set.seed(123)
datos <- data.frame(
id = 1:20,
edad = sample(18:60, 20, replace = TRUE),
estres = sample(1:5, 20, replace = TRUE),
horas_sueno = rnorm(20, mean = 7, sd = 1)
)
# Introducir algunos valores perdidos
datos$horas_sueno[c(3, 7)] <- NA
datos
## id edad estres horas_sueno
## 1 1 48 2 6.679944
## 2 2 32 1 5.688478
## 3 3 31 3 NA
## 4 4 20 4 6.870589
## 5 5 59 1 7.886736
## 6 6 60 3 6.848604
## 7 7 54 5 NA
## 8 8 31 4 3.772677
## 9 9 42 2 6.228208
## 10 10 43 5 7.286549
## 11 11 44 1 5.779488
## 12 12 22 1 7.434550
## 13 13 44 2 7.800177
## 14 14 45 3 6.836069
## 15 15 26 4 8.242919
## 16 16 46 5 6.065615
## 17 17 52 5 7.393709
## 18 18 25 3 7.403631
## 19 19 43 1 6.113563
## 20 20 24 2 5.681062
horas_sueno ignorando los NA.# Escribe tu código aquí
summary(datos)
## id edad estres horas_sueno
## Min. : 1.00 Min. :20.00 Min. :1.00 Min. :3.773
## 1st Qu.: 5.75 1st Qu.:29.75 1st Qu.:1.75 1st Qu.:6.078
## Median :10.50 Median :43.00 Median :3.00 Median :6.842
## Mean :10.50 Mean :39.55 Mean :2.85 Mean :6.667
## 3rd Qu.:15.25 3rd Qu.:46.50 3rd Qu.:4.00 3rd Qu.:7.401
## Max. :20.00 Max. :60.00 Max. :5.00 Max. :8.243
## NA's :2
#Calcula la media de horas_sueño ignorando los NA
mean(datos$horas_sueno, na.rm = TRUE)
## [1] 6.667365
x <- mean(datos$horas_sueno, na.rm = TRUE)
# Para hacer el reemplazo hay que usar los corchetes rectos con la posición de los valores perdidos y eso se reemplaza por la x
datos <- datos %>%
mutate(horas_sueno = ifelse(is.na(horas_sueno), x, horas_sueno))
summary(datos)
## id edad estres horas_sueno
## Min. : 1.00 Min. :20.00 Min. :1.00 Min. :3.773
## 1st Qu.: 5.75 1st Qu.:29.75 1st Qu.:1.75 1st Qu.:6.102
## Median :10.50 Median :43.00 Median :3.00 Median :6.758
## Mean :10.50 Mean :39.55 Mean :2.85 Mean :6.667
## 3rd Qu.:15.25 3rd Qu.:46.50 3rd Qu.:4.00 3rd Qu.:7.396
## Max. :20.00 Max. :60.00 Max. :5.00 Max. :8.243
estres en una variable binaria:
# Escribe tu código aquí
datos %>%
mutate(estres = ifelse(estres %in% 4:5, "Alto", "Bajo"))
## id edad estres horas_sueno
## 1 1 48 Bajo 6.679944
## 2 2 32 Bajo 5.688478
## 3 3 31 Bajo 6.667365
## 4 4 20 Alto 6.870589
## 5 5 59 Bajo 7.886736
## 6 6 60 Bajo 6.848604
## 7 7 54 Alto 6.667365
## 8 8 31 Alto 3.772677
## 9 9 42 Bajo 6.228208
## 10 10 43 Alto 7.286549
## 11 11 44 Bajo 5.779488
## 12 12 22 Bajo 7.434550
## 13 13 44 Bajo 7.800177
## 14 14 45 Bajo 6.836069
## 15 15 26 Alto 8.242919
## 16 16 46 Alto 6.065615
## 17 17 52 Alto 7.393709
## 18 18 25 Bajo 7.403631
## 19 19 43 Bajo 6.113563
## 20 20 24 Bajo 5.681062
edad.# Escribe tu código aquí
# Se necesita la función
datos %>%
mutate(edad_z = (edad - mean(edad))/ sd(edad))
## id edad estres horas_sueno edad_z
## 1 1 48 2 6.679944 0.6836184
## 2 2 32 1 5.688478 -0.6108070
## 3 3 31 3 6.667365 -0.6917085
## 4 4 20 4 6.870589 -1.5816260
## 5 5 59 1 7.886736 1.5735358
## 6 6 60 3 6.848604 1.6544374
## 7 7 54 5 6.667365 1.1690279
## 8 8 31 4 3.772677 -0.6917085
## 9 9 42 2 6.228208 0.1982089
## 10 10 43 5 7.286549 0.2791105
## 11 11 44 1 5.779488 0.3600120
## 12 12 22 1 7.434550 -1.4198228
## 13 13 44 2 7.800177 0.3600120
## 14 14 45 3 6.836069 0.4409136
## 15 15 26 4 8.242919 -1.0962165
## 16 16 46 5 6.065615 0.5218152
## 17 17 52 5 7.393709 1.0072247
## 18 18 25 3 7.403631 -1.1771180
## 19 19 43 1 6.113563 0.2791105
## 20 20 24 2 5.681062 -1.2580196
Pregunta final:
¿Por qué es útil estandarizar variables en algunos modelos
estadísticos?
Media de 0
Sirve para comparar variables que se encuentran en escalas distintas, ya que al pasarlos a z-score sus medias quedan en 0.
Sube tu archivo .Rmd compilado en HTML o PDF, junto con
respuestas breves a las preguntas conceptuales.