Carga de paquetes

install.packages("tidyverse")
install.packages("knitr")

Carga de paquetes

library(tidyverse)
library(knitr)

La base de datos

Utilizaremos las versiones en español de los sets de datos iris:

iris_es <- iris %>%
  rename(long_sepalo = Sepal.Length,
         ancho_sepalo = Sepal.Width,
         long_petalo = Petal.Length,
         ancho_petalo = Petal.Width,
         especie = Species)

Ejemplo integrador

Tabla

# 1.Calculamos los promedios por especie y guardamos el resumen en un objeto llamado "resumen_iris"
resumen_iris <- iris_es %>%
  group_by(especie) %>%
  summarise(
    long_petalo_prom = round(mean(long_petalo), 2),
    ancho_petalo_prom = round(mean(ancho_petalo), 2)
  )

# 2.Imprimimos la tabla con formato kable
kable(resumen_iris, 
      align = "c", 
      col.names = c("Especie", "Long. pétalo prom. (cm)", "Ancho pétalo prom. (cm)"),
      caption = "Promedios de longitud y ancho de pétalo por especie.")
Promedios de longitud y ancho de pétalo por especie.
Especie Long. pétalo prom. (cm) Ancho pétalo prom. (cm)
setosa 1.46 0.25
versicolor 4.26 1.33
virginica 5.55 2.03

Representación gráfica

# 3.Visualizamos graficamente
ggplot(iris_es, aes(x = especie, y = long_petalo, fill = especie)) +
  geom_boxplot(alpha = 0.7, width = 0.6, color = "black", outlier.shape = 21) + 
  # Visualización de la distribución y datos atípicos
  geom_jitter(width = 0.1, alpha = 0.5, size = 2, color = "black") +   
  # Puntos individuales para mostrar la densidad de los datos
  stat_summary(fun = mean, geom = "point", shape = 23, size = 4, fill = "yellow", color = "black") + 
  # Resaltado de la media aritmética
  scale_fill_brewer(palette = "Set2") + 
  # Escala fija de 0 a 8 para una comparación estandarizada
  scale_y_continuous(limits = c(0, 8), breaks = 0:8) + 
  labs(title = "Distribución de la longitud del pétalo por especie", 
       x = "Especie",
       y = "Longitud del pétalo (cm)",
       fill = "Especie") + 
  theme_classic() +   
  theme(
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
    axis.title = element_text(size = 14, face = "bold"),
    axis.text = element_text(size = 13, face = "bold"),
    axis.ticks.length = unit(0.5, "cm"),
    legend.position = "none", # Opcional: quitamos la leyenda porque ya están los nombres en el eje
    panel.grid.major.x = element_line(color = "grey90") # Guía visual para la escala
  ) + 
  coord_flip()