Ejercicio dplyr

Author
Affiliation

Mtro. Santiago Ríos

En esta sección pondrás en práctica lo aprendido en este módulo. El objetivo es que puedas aplicar las funciones de dplyr a un conjunto de datos real. Esto será importante para las próximas secciones, donde aprenderás a realizar análisis estadísticos y visualizaciones de datos. Sin embargo, antes de que veamos estos temas, es importante que te sientas cómodo trabajando con dplyr, manejando datos y realizando transformaciones básicas.

Vamos a simular el flujo de trabajo que seguirías en un proyecto de análisis de datos. Al terminar este ejercicio, se recomienda que repitas el proceso con tus propios datos o con otros conjuntos de datos que te interesen en tu computadora utilizando RStudio.

Cargar librería y datos

Para este ejercicio, vamos a trabajar con 2 librerías: dplyr y datos. La librería datos (install.packages("datos") en tu RStudio, en esta sesión ya está instalada) contiene varios conjuntos de datos en español. En este caso, vamos a trabajar con el conjunto de datos pinguinos que contiene medidas de tamaño de pingüinos adultos en busca de comida cerca de la estación Palmer en la Antártica.

Carga la librería dplyr y la librería datos

Tip

Para conocer más sobre un conjunto de datos, puedes utilizar la función help(pinguinos) o ?pinguinos.

El conjunto de datos pinguinos contiene las siguientes variables:

Variable Name Description
especie Especie de pingüino
isla Isla donde se encontró el pingüino
largo_pico_mm Longitud del pico en milímetros
alto_pico_mm Profundidad del pico en milímetros
largo_aleta_mm Longitud de la aleta en milímetros
masa_corporal_g Masa corporal en gramos
sexo Sexo del pingüino
anio Año de la medición

Inspecciona los datos con glimpse()

Utiliza la siguiente consola para contestar esta pregunta: ¿Cuántas especies de pingüinos hay en el conjunto de datos? Recuerda que los nombres de las especies están en la variable especie. Puedes usar cualquier método que prefieras para encontrar la respuesta. Cuando tengas la respuesta, escribe los nombres de las especies en la línea punteada en la consola de abajo y checa tu respuesta. NOTA. Asegurate de usar mayúsculas y no poner acentos en los nombres de las especies. Escribe los nombres en órden alfabético en tu respuesta.

Pista 1

recuerda las siguientes funciones de dplyr:

distinct()
count()
pull()
Pista 2

Recuerda usar pipas %>% para encadenar funciones de dplyr de manera más eficiente.


datos %>%
  distinct(columna)
Solución
pinguinos %>%
  distinct(especie)
nombre_especies <- c("Adelia", "Barbijo", "Papua")
print(nombre_especies)

Utiliza la siguiente consola para contestar esta pregunta: ¿Cuántos pingüinos hembras hay? Recuerda que los sexos en la variable sexo. Puedes usar cualquier método que prefieras para encontrar la respuesta. Cuando tengas la respuesta, escribe el valor en la línea punteada en la consola de abajo y checa tu respuesta.

Pista 1

recuerda las siguientes funciones de dplyr:


count()
Pista 2

Recuerda usar pipas %>% para encadenar funciones de dplyr de manera más eficiente.


datos %>%
  count(columna)
Solución
pinguinos %>%
  distinct(sexo)
numero_pinguinos_hembras <- 165

print(numero_pinguinos_hembras)

en nuestros datos, la variable anio está registrada como una variable numérica. Aunque esto no está mal, queremos recodificarla a una variable de tipo factor. Escribe tu respuesta en la línea punteada en la consola de abajo y checa tu respuesta.

Solución
pinguinos_factor <- pinguinos %>%
  mutate(anio = as.factor(anio))

En el siguiente ejercicio, elimina todas las observaciones con NA (observaciones faltantes) en nuestro dataset para que en el futuro evitemos errores. Primero corre el código siguiente para explorar cuántos datos faltantes hay en cada variable. Cuando tengas tu respuesta, escribe el valor en la línea punteada en la consola de abajo y checa tu respuesta. Recuerda la función na_omit() para eliminar los datos faltantes.

Solución
pinguinos_na <- pinguinos %>%
  na.omit()

Ahora, vamos a realizar lo siguiente: pasa todas las variables que miden longitud y masa a centímetros y kilogramos, respectivamente. Recuerda que 1 milímetro es igual a 0.1 centímetros y 1 gramo es igual a 0.001 kilogramos. Después de calcular las nuevas variables, caulcula el promedio y desviación estándar de estas nuevas variables. revisa los datos con glimpse() para asegurarte de que los cambios se hayan realizado correctamente. Escribe tu respuesta en la línea punteada en la consola de abajo y checa tu respuesta.

Solución
# Convertir longitudes y masas a cm y kg, respectivamente

pinguinos_limpio <- pinguinos %>%
  na.omit() %>%  # Eliminar datos faltantes
  mutate(
    largo_pico_cm = largo_pico_mm * 0.1,   # Convertir milímetros a centímetros
    alto_pico_cm = alto_pico_mm * 0.1,     # Convertir milímetros a centímetros
    largo_aleta_cm = largo_aleta_mm * 0.1,  # Convertir milímetros a centímetros
    masa_corporal_kg = masa_corporal_g * 0.001  # Convertir gramos a kilogramos
  )

# Revisa los datos con 'glimpse()' para verificar que los cambios se realizaron correctamente.
glimpse(pinguinos_limpio)

# Calcula el promedio y desviación estándar de las nuevas variables

pinguinos_resumen <- pinguinos_limpio %>%
  summarize(
    pico_promedio = mean(largo_pico_cm),
    pico_sd = sd(largo_pico_cm),
    alto_promedio = mean(alto_pico_cm),
    alto_sd = sd(alto_pico_cm),
    aleta_promedio = mean(largo_aleta_cm),
    aleta_sd = sd(largo_aleta_cm),
    masa_promedio = mean(masa_corporal_kg),
    masa_sd = sd(masa_corporal_kg)
  ) 


glimpse(pinguinos_resumen)

Podemos usar condiciones lógicas para realizar más facil este código. Por ejemplo, podemos usar ends_with() para seleccionar columnas que terminan con un patrón específico (“mm” y “g”). Después, utilizamos .names para asignar nombres a las nuevas columnas con el formato “nuevo_{.col}cm” y “nuevo{.col}_kg”. Este argumento crea automáticamente nombres con el patrón nuevo+nombre de la columna original+_cm o _kg. Se hace lo mismo para las columnas que terminan con “g”.

Ahora, vamos a construir un histograma de las masas corporales de los pingüinos en cada especie. En el próximo módulo veremos cómo construir estos gráficos a detalle. Por el momento, solo corre el siguiente código y observa el histograma que se genera. A partir de éste, contesta las siguientes preguntas.

Responde: Con base en las masas corporales de los pingüinos en cada especie, ¿cuál de las siguientes afirmaciones es verdadera?

  1. Los pingüinos de la especie Adelia tienen una masa corporal promedio mayor que los de la especie Papúa.
  2. Los pingüinos de la especie Papúa tienen una masa corporal promedio mayor que los de la especie Barbijo.
  3. No se puede determinar la masa corporal promedio de los pingüinos en cada especie a partir del histograma.

Por último, realiza este ejercicio.

El código que visualiza las distribuciones de alturas con líneas que representan 1, 2 y 3 desviaciones estándar nos permite entender cómo se distribuyen los datos alrededor de la media de cada especie. Esto es muy útil para formular preguntas sobre la variabilidad y la dispersión de los datos alrededor de la media, así como para identificar qué porcentaje de los datos cae dentro de uno, dos o tres desviaciones estándar de la media, según la regla empírica (68-95-99.7% para distribuciones normales). Ejecuta el siguiente código y observa los histogramas con las líneas de las desviaciones estándar.

Con base en los histogramas y las líneas que representan las desviaciones estándar (1, 2 y 3), ¿cuál de las siguientes afirmaciones es correcta?

  1. Aproximadamente el 68% de los datos de todas las especies cae dentro de 1 desviación estándar de la media.
  2. Aproximadamente el 95% de los datos de todas las especies cae dentro de 2 desviaciones estándar de la media.
  3. Aproximadamente el 99.7% de los datos de todas las especies cae dentro de 3 desviaciones estándar de la media.