Capítulo 8 Soluciones a problemas

Todos los problemas en programación tienen más de una forma de llegar a ellos, es por esto que las soluciones acá mostradas deben tomarse solo como una referencia, y revisar si el resultado final de tu código (aunque sea distinto de este), sea igual al que presentamos.

8.2 Capítulo 2

8.2.1 Ejercicio 1

Una posible solución a este problema sería:

`r mean((iris %>% filter(Species == "virginica"))$Petal.Length)`

8.3 Capítulo 3

8.3.1 Ejercicio 1

8.3.1.1 a

lon lat basisOfRecord
-72.97728 -51.07892 HUMAN_OBSERVATION
-71.87139 -45.94562 HUMAN_OBSERVATION
-71.86151 -46.17067 HUMAN_OBSERVATION
-71.88937 -46.04310 HUMAN_OBSERVATION
-72.87022 -51.12036 HUMAN_OBSERVATION
-72.00898 -46.01153 HUMAN_OBSERVATION
-73.14041 -50.84305 HUMAN_OBSERVATION
-71.85057 -45.99832 HUMAN_OBSERVATION
-72.07593 -46.05139 HUMAN_OBSERVATION
-71.91163 -45.84344 HUMAN_OBSERVATION
-71.91210 -46.12133 HUMAN_OBSERVATION
-71.81252 -46.04818 HUMAN_OBSERVATION
-72.97587 -51.18353 HUMAN_OBSERVATION
-73.03667 -51.04976 HUMAN_OBSERVATION
-72.93940 -49.37483 HUMAN_OBSERVATION
-72.91720 -49.30175 HUMAN_OBSERVATION
-72.97712 -51.01511 HUMAN_OBSERVATION
-71.87026 -46.08686 HUMAN_OBSERVATION
-72.02424 -45.92156 HUMAN_OBSERVATION
-72.89062 -46.03708 HUMAN_OBSERVATION
-72.43751 -47.20485 HUMAN_OBSERVATION
-73.01456 -51.03635 HUMAN_OBSERVATION
-73.03190 -51.17531 HUMAN_OBSERVATION
-72.72944 -46.25602 HUMAN_OBSERVATION
-71.31538 -41.30110 PRESERVED_SPECIMEN
-71.31538 -41.30110 PRESERVED_SPECIMEN
-71.71667 -44.86667 PRESERVED_SPECIMEN
-71.71667 -44.86667 PRESERVED_SPECIMEN
-71.30989 -40.81978 PRESERVED_SPECIMEN
-71.31538 -41.30110 PRESERVED_SPECIMEN
-73.02467 -50.46476 PRESERVED_SPECIMEN
-71.33186 -41.26523 PRESERVED_SPECIMEN
-73.01764 -50.46747 PRESERVED_SPECIMEN
-71.00000 -30.00000 PRESERVED_SPECIMEN
-71.00000 -30.00000 PRESERVED_SPECIMEN
-71.70000 -45.26667 PRESERVED_SPECIMEN
-71.70000 -45.26667 PRESERVED_SPECIMEN
-71.70000 -45.26667 PRESERVED_SPECIMEN
-72.08000 -47.25000 PRESERVED_SPECIMEN
-70.91129 -53.15483 PRESERVED_SPECIMEN
-73.84761 -42.54746 PRESERVED_SPECIMEN
-71.00000 -30.00000 PRESERVED_SPECIMEN
-71.00000 -30.00000 PRESERVED_SPECIMEN
-71.36714 -41.13574 PRESERVED_SPECIMEN
-71.71094 -42.75692 HUMAN_OBSERVATION
-71.64718 -40.22605 PRESERVED_SPECIMEN
-67.88534 -43.99376 PRESERVED_SPECIMEN

8.3.1.2 b

basisOfRecord N
HUMAN_OBSERVATION 119
PRESERVED_SPECIMEN 70

8.3.2 Ejercicio 2

8.3.2.1 a

Primero bajamos la base de datos, lo cual se puede hacer de forma manual o como en el código siguiente utilizando la función download.file

Una vez bajada esta base de datos utilizaremos los paquetes readxl para leer los archivos excel, tidyverse para manipular los datos y stringr para trabajar con texto.

Partimos leyendo la pestaña que contiene las estaciones meteorológicas con su código:

## New names:
## * `` -> ...8
## * `` -> ...9
## * `` -> ...10
## * `` -> ...11
## * `` -> ...12
## * … and 1 more problem

Luego para poder más adelante unir esta base de datos con otras, cambiamos el nombre de la columna Codigo_Est_Meteoro a Est_Meteoro como aparece en las otras bases de datos.

Luego empezamos a trabajar con la base de datos de temperatura media, para esto leemos la pestaña E10000003

Existen varias variables que no utilizaremos, por ejemplo el código de la variable, y la unidad de medida. Además vemos que la variable día, siempre tiene valor 0, por lo cuál podemos eliminarla también.

Además podemos cambiar los nombres de la columna ValorF que no tiene ningún significado a TempMedia y Año a Year, esta última variable es cambiada solo por que la letra Ñ puede no ser leída por todos los computadores.

Si nos fijamos, hay algunos años, en los cuales todos los meses aparecen como 13, esto nos indica que en estos años no se registró en que mes se realizó la medición, por lo cual se eliminarán esas obsevaciones.

Posterior a esto, unumos la base de datos TempMedia con la base de datos EM y seleccionamos tan solo las columnas que nos interesan y finalmente transformamos el mes en una variable numérica:

## Joining, by = "Est_Meteoro"

,

Si hicieramos todo esto en un comando tendriamos el siguiente código

De la misma manera modificamos el código de arriba para la humedad con la salvedad que la columna de día no tiene tilde en esta pestaña a la fecha de 19 de Agosto del 2018:

## Joining, by = "Est_Meteoro"

En el siguiente código unimos las dos bases de datos, vemos las primeras 20 observaciones de la base de datos resultante en la tabla 8.1

## Joining, by = c("Mes", "Year", "Ciudad_localidad")
Tabla 8.1: Las primeras 20 observaciones de temperatura y humedad unidas
Mes Year TempMedia Ciudad_localidad HumMedia
1 1981 22.0 Arica NA
2 1981 22.2 Arica NA
3 1981 22.1 Arica NA
4 1981 20.3 Arica NA
5 1981 18.2 Arica NA
6 1981 17.0 Arica NA
7 1981 15.0 Arica NA
8 1981 16.0 Arica NA
9 1981 16.6 Arica NA
10 1981 15.9 Arica NA
11 1981 19.1 Arica NA
12 1981 21.1 Arica NA
1 1981 19.7 Iquique NA
2 1981 21.1 Iquique NA
3 1981 20.9 Iquique NA
4 1981 19.9 Iquique NA
5 1981 17.6 Iquique NA
6 1981 15.9 Iquique NA
7 1981 14.6 Iquique NA
8 1981 15.6 Iquique NA

Con esto vemos que la humedad media no es medida en los mismos años ni en todos los lugares que se mide la temperatura media, pero como ambas variables nos interesan por igual, la mantenemos de todas maneras con sus valores NA

8.3.2.2 b

El segundo ejercicio es mucho mas simple, donde solo tenemos que agrupar por ciudad y mes, y usar summarize_all para las funciones mean y sd como vemos en la tabla 8.2

Tabla 8.2: Las primeras 20 observaciones de temperatura y humedad agrupadas por mes y localidad
Mes Ciudad_localidad TempMedia_mean HumMedia_mean TempMedia_sd HumMedia_sd
1 Antártica Chilena 1.383784 87.240 0.6238383 3.027045
1 Antofagasta 20.186487 70.120 0.9068144 1.666433
1 Arica 22.421622 63.960 0.9684280 3.453694
1 Balmaceda 12.334286 57.520 1.2107224 3.346192
1 Calama 17.000000 25.000 NA NA
1 Cerrillos 20.996000 NaN 0.7855359 NaN
1 Chillán 19.794286 60.960 0.7490947 5.691046
1 Concepción 16.729730 72.060 0.6753044 6.944278
1 Copiapó 19.604348 NaN 0.7449700 NaN
1 Coyhaique 13.943243 59.520 1.2568790 3.088203
1 Curicó 20.697143 57.920 0.8143874 6.695670
1 Graneros 21.480000 NaN 0.4661330 NaN
1 Iquique 21.856757 62.180 1.0930438 3.594718
1 Isla Juan Fernández 18.562162 70.180 0.5832625 3.523067
1 La Serena 17.355556 76.260 0.7643651 2.833372
1 Osorno 15.807407 71.560 0.9388725 6.008993
1 Pudahuel 20.735135 45.775 0.8743938 5.933169
1 Puerto Montt 14.461111 77.760 0.7104436 2.230022
1 Punta Arenas 10.848649 62.560 0.7343257 2.900517
1 Quinta Normal 21.327027 50.600 0.6768590 8.341163