# Carga de paquetes
library(tidyverse)
library(knitr)
Utilizaremos la versiones en español de los sets de datos
PlantGrowth e iris para facilitar la lectura
de los informes:
PlantGrowth_es <- PlantGrowth %>%
rename(peso = weight,
tratamiento = group)
iris_es <- iris %>%
rename(long_sepalo = Sepal.Length,
ancho_sepalo = Sepal.Width,
long_petalo = Petal.Length,
ancho_petalo = Petal.Width,
especie = Species)
En R Markdown existen dos formas principales de incluir tablas en nuestro documento: escribiéndolas manualmente mediante la sintaxis de Markdown, o generándolas dinámicamente a partir de los resultados de nuestro análisis en R.
Si necesitamos incluir una tabla de conceptos, un diseño empírico o
datos fijos que no provienen de un código de R, podemos “dibujarla”
directamente en el documento usando barras verticales (|)
para separar columnas y guiones (-) para separar el
encabezado.
El uso de los dos puntos (:) en la línea de guiones
permite definir la alineación de la columna (izquierda, centro o
derecha). Por ejemplo:
| Tratamiento | Descripción | Dosis (L/ha) |
|---|---|---|
| T0 | Control (agua) | 0 |
| T1 | Dosis recomendada | 2 |
| T2 | Dosis doble | 4 |
Al renderizar el documento, R Markdown convertirá automáticamente este texto en una tabla estructurada, con líneas divisorias y el texto alineado tal como se indicó.
Cuando generamos cuadros resúmenes a partir de nuestros datos,
podemos imprimir el objeto directamente. A continuación, construimos una
tabla resumen a partir de estadísticas descriptivas del set de datos
PlantGrowth_es:
resumen <- PlantGrowth_es %>%
group_by(tratamiento) %>%
summarise(
n = n(),
peso_promedio = round(mean(peso), 2),
desvio = round(sd(peso), 2)
)
# Imprimimos el resultado crudo
resumen
## # A tibble: 3 × 4
## tratamiento n peso_promedio desvio
## <fct> <int> <dbl> <dbl>
## 1 ctrl 10 5.03 0.58
## 2 trt1 10 4.66 0.79
## 3 trt2 10 5.53 0.44
Si renderizamos el documento en este punto, veremos que la salida de resumen es funcional, pero su aspecto visual es rústico y similar al de la consola de RStudio (sin líneas divisorias).
Para transformar esta salida en una tabla formal y profesional,
utilizamos la función kable() del paquete
knitr (que ya cargamos al inicio del capítulo). Esta
función toma nuestros datos y les aplica automáticamente el formato de
tabla adecuado para HTML o Word:
# Utilizamos kable para formatear la tabla
kable(resumen,
align = "c", # Centra el contenido de las columnas
col.names = c("Tratamiento", "N", "Peso Prom. (g)", "Desvío"), # nombres de columnas en la tabla
caption = "Tabla 1. Estadísticas descriptivas del peso por tratamiento.") # título de la tabla
| Tratamiento | N | Peso Prom. (g) | Desvío |
|---|---|---|---|
| ctrl | 10 | 5.03 | 0.58 |
| trt1 | 10 | 4.66 | 0.79 |
| trt2 | 10 | 5.53 | 0.44 |
A continuación se muestra un ejemplo que integra manipulación,
visualización y una tabla en un único documento R Markdown, aplicado al
dataset iris_es.
Primero, calculamos los promedios de las dimensiones de los pétalos para cada especie y presentamos el resultado en una tabla con formato:
# 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)
)
# 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 = "Tabla 2. 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 |
Luego, utilizamos el mismo conjunto de datos para generar un gráfico de dispersión que nos permita visualizar la relación entre estas dos variables, diferenciando por especie:
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()
Para ampliar la información, se recomienda consultar:
Xie, Y., Allaire, J.J. & Grolemund, G. (2023). R Markdown: La guía definitiva.
Xie, Y., Dervieux, C. & Riederer, E. (2023). R Markdown Cookbook.