Quarto: tablas, citas y formatos
Universidad El Bosque
17 de junio de 2026
kable()gtcitation()Parte 1
Tablas
Actividad 1 · 5 min
Recordatorio: resume pinguinos con dplyr
En un bloque de código en tu documento .qmd, crea el objeto resumen:
pinguinos <- penguins |> drop_na()
resumen <- pinguinos |>
group_by(species) |>
summarise(
n = n(),
masa_media = mean(body_mass_g),
masa_sd = sd(body_mass_g),
pico_medio = mean(bill_length_mm)
)Lo usarás en las actividades siguientes para crear tablas.
kable(): tablas al instantekable() del paquete knitr convierte cualquier data frame en una tabla con una sola línea:
| species | n | masa_media | masa_sd | pico_medio |
|---|---|---|---|---|
| Adelie | 146 | 3706.164 | 458.6201 | 38.82397 |
| Chinstrap | 68 | 3733.088 | 384.3351 | 48.83382 |
| Gentoo | 119 | 5092.437 | 501.4762 | 47.56807 |
Suficiente para explorar datos o incluir una tabla rápida. Para presentaciones y publicaciones, gt ofrece mucho más control.
gtgt crea tablas en HTML con una sintaxis de pipeline, igual que ggplot2 pero para tablas:
gt| Pingüinos de Palmer | ||||
| Resumen por especie | ||||
| Especie | N | Media (g) | DE (g) | Pico (mm) |
|---|---|---|---|---|
| Adelie | 146 | 3706.164 | 458.6201 | 38.82397 |
| Chinstrap | 68 | 3733.088 | 384.3351 | 48.83382 |
| Gentoo | 119 | 5092.437 | 501.4762 | 47.56807 |
gtresumen |>
gt() |>
tab_header(
title = "Pingüinos de Palmer",
subtitle = "Resumen por especie"
) |>
cols_label(
species = "Especie",
n = "N",
masa_media = "Media (g)",
masa_sd = "DE (g)",
pico_medio = "Pico (mm)"
) |>
fmt_number(
columns = c(masa_media, masa_sd, pico_medio),
decimals = 1
) |>
tab_spanner(
label = "Masa corporal",
columns = c(masa_media, masa_sd)
)| Pingüinos de Palmer | ||||
| Resumen por especie | ||||
| Especie | N |
Masa corporal
|
Pico (mm) | |
|---|---|---|---|---|
| Media (g) | DE (g) | |||
| Adelie | 146 | 3,706.2 | 458.6 | 38.8 |
| Chinstrap | 68 | 3,733.1 | 384.3 | 48.8 |
| Gentoo | 119 | 5,092.4 | 501.5 | 47.6 |
gtresumen |>
gt() |>
tab_header(
title = "Pingüinos de Palmer",
subtitle = "Resumen por especie"
) |>
cols_label(
species = "Especie",
n = "N",
masa_media = "Media (g)",
masa_sd = "DE (g)",
pico_medio = "Pico (mm)"
) |>
fmt_number(
columns = c(masa_media, masa_sd, pico_medio),
decimals = 1
) |>
tab_spanner(
label = "Masa corporal",
columns = c(masa_media, masa_sd)
) |>
tab_source_note("Fuente: Gorman et al. (2014)") |>
tab_footnote(
footnote = "Medida en milímetros",
locations = cells_column_labels(pico_medio)
)| Pingüinos de Palmer | ||||
| Resumen por especie | ||||
| Especie | N |
Masa corporal
|
Pico (mm)1 | |
|---|---|---|---|---|
| Media (g) | DE (g) | |||
| Adelie | 146 | 3,706.2 | 458.6 | 38.8 |
| Chinstrap | 68 | 3,733.1 | 384.3 | 48.8 |
| Gentoo | 119 | 5,092.4 | 501.5 | 47.6 |
| 1 Medida en milímetros | ||||
| Fuente: Gorman et al. (2014) | ||||
gt tiene muchas opciones adicionales. Puedes explorarlas en la documentación oficial.
En un documento Quarto (no en presentaciones revealjs), puedes etiquetar una tabla y citarla en el texto:
En el bloque de código:
```{r}
#| label: tbl-resumen
#| tbl-cap: "Pingüinos de Palmer: resumen por especie"
resumen |> gt() |> ...
```En el texto:
Resultado renderizado:
Como se observa en la Tabla 1, la especie Gentoo tiene la mayor masa corporal.
La numeración automática y las referencias cruzadas funcionan en documentos (HTML, PDF, Word), no en presentaciones revealjs. El prefijo tbl- en el label es obligatorio. Lo mismo aplica para figuras con el prefijo fig- (en la siguiente sesión).
Actividad 2 · 6 min
Una tabla gt en tu documento
En tu documento .qmd, añade una sección nueva con una tabla a partir del objeto resumen que ya creaste:
resumen en tabla con gt()tab_header()cols_label()Parte 2
Citas y referencias bibliográficas
.bibLas referencias se guardan en un archivo de texto con extensión .bib. Cada entrada tiene un tipo (@Article, @Book, @Manual…), una clave única y los campos de la referencia:
@Article{Spitzer2006,
title = {A Brief Measure for Assessing Generalized Anxiety Disorder},
author = {Robert L. Spitzer and Kurt Kroenke and Janet B. W. Williams
and Bernd Löwe},
journal = {Archives of Internal Medicine},
year = {2006},
volume = {166},
number = {10},
pages = {1092--1097},
doi = {10.1001/archinte.166.10.1092},
}La clave Spitzer2006 es la que usarás para citar. Puedes elegir cualquier clave, pero un formato como AutorAño es claro y fácil de recordar.
Los autores van siempre separados por and. Para indicar explícitamente el(los) apellido(s), usa la forma Apellido, Nombre; esto es indispensable para autores con dos apellidos:
{Leongómez, Juan David and Wickham, Hadley}
Con Nombre Apellido, BibTeX puede confundir cuál es el apellido.
No necesitas escribir las entradas a mano. Hay varias fuentes, de mejor a peor:
Páginas de editoriales (ScienceDirect, Springer, Wiley, APA PsycNet…) → busca “Export citation” o “Cite” → selecciona BibTeX. Entradas completas, con DOI.
Editor visual de RStudio → inserta una cita → busca por DOI, PubMed ID o título. No necesitas ningún gestor instalado.
Gestores de referencias (Zotero, Mendeley, EndNote…) → exporta tu biblioteca o selección como .bib. La integración de Zotero con RStudio es especialmente fluida y vale la pena adoptar.
Google Scholar → “Citar” → BibTeX. Práctico para buscar rápido, pero casi nunca incluye el DOI, lo que limita la calidad de la referencia.
El archivo .bib es texto plano: puedes crearlo en RStudio con File > New File > Text File, guardarlo como referencias.bib en la raíz del proyecto (junto a mi_reporte.qmd y curso_r.Rproj), y pegar las entradas que vayas recopilando.
El editor visual de RStudio permite insertar citas directamente, sin salir del documento:
Ctrl+Shift+F4).bib automáticamenteSi usas Zotero, aparece directamente en el panel de búsqueda de citas del editor visual. Solo tienes que mantener Zotero abierto mientras trabajas en RStudio.
Añade dos líneas al YAML de tu documento Quarto:
---
title: "Mi reporte"
format: html
bibliography: referencias.bib
csl: https://www.zotero.org/styles/apa
---bibliography apunta al archivo .bib. csl define el estilo de citas: el enlace descarga el estilo APA directamente desde el repositorio de Zotero, sin necesidad de guardar ningún archivo.
Puedes usar cualquier estilo del repositorio zotero.org/styles. Busca por nombre de revista o estilo, copia el enlace y pégalo en csl:. La lista de referencias aparece automáticamente al final del documento.
Con el archivo .bib configurado, citar es tan simple como escribir la clave:
| Sintaxis | Resultado |
|---|---|
@Spitzer2006 |
Spitzer et al. (2006) |
[@Spitzer2006] |
(Spitzer et al., 2006) |
[@R-base; @tidyverse] |
(R Core Team, 2026; Wickham et al., 2019) |
[-@Spitzer2006] |
(2006) — suprime el autor |
La lista de referencias completa se genera sola al final del documento.
En el editor visual, al escribir @ aparece un menú de autocompletado con todas las claves de tu .bib. No necesitas recordarlas de memoria.
citation() devuelve la referencia de R o de cualquier paquete:
toBibtex() la convierte al formato BibTeX listo para copiar al .bib:
@Manual{,
title = {R: A Language and Environment for Statistical Computing},
author = {{R Core Team}},
organization = {R Foundation for Statistical Computing},
address = {Vienna, Austria},
year = {2025},
url = {https://www.R-project.org/},
}
Si usas datos o herramientas de R en un trabajo académico, citar R y los paquetes relevantes es una buena práctica. Muchos revisores ya lo esperan y es lo minimo que podemos hacer para dar crétido a las y los autores de paquetes que usamos.
Actividad 3 · 8 min
Añade citas a tu documento
Guarda el archivo en la raíz de tu proyecto curso_r (junto a mi_reporte.qmd). Luego:
bibliography: referencias.bib y csl: https://www.zotero.org/styles/apa al YAML@tidyverse en algún párrafo del documentocitation("gt") con toBibtex(), añádelo al .bib y cítaloParte 3
Opciones de formato
Opciones del YAML que mejoran la navegación del documento:
| Opción | Qué hace |
|---|---|
toc: true |
Tabla de contenido al inicio |
toc-depth: 3 |
Hasta el tercer nivel de título |
number-sections: true |
Numera las secciones (1, 1.1, 1.1.1…) |
La tabla de contenido genera automáticamente enlaces a cada sección.
code-fold y temas HTMLcode-fold: true oculta el código por defecto pero deja un botón “Show code” para quien quiera verlo. Útil para reportes donde el texto es lo principal.
Otros temas disponibles: flatly, minty, journal, lumen, pulse, sandstone, united, yeti, entre otros.
Puedes previsualizar todos los temas en quarto.org/docs/output-formats/html-themes.html
El tema cosmo y flatly, por ejemplo, son opciones limpias y legibles. journal imita el estilo de una publicación académica.
Con Quarto puedes cambiar el formato de salida con solo editar el YAML:
format: docx # Word
format: pdf # PDF (requiere LaTeX)
format: html # HTML (el más completo y flexible)Para Word (docx), la mayoría de opciones de HTML funcionan igual. Es útil cuando el destinatario necesita un archivo editable o cuando la institución exige ese formato.
Para PDF se necesita una instalación de LaTeX. Si no tienes LaTeX, puedes instalar tinytex desde R con tinytex::install_tinytex().
Actividad final · 15 min
Mini-reporte completo
Edita el YAML y el contenido de tu documento .qmd para que incluya:
toc: true) y secciones numeradascosmo, flatly o cualquier otro)code-fold: true para que el código esté oculto por defectogt de la Actividad 2, con su referencia cruzada (@tbl-xxx) en el textoRenderiza y revisa el resultado en el navegador.
Antes de terminar…
Quiz rápido
¿Qué función de gt agrupa varias columnas bajo un encabezado común?
cols_group()tab_header()tab_spanner()group_cols()✓ c) tab_spanner() crea un encabezado que abarca varias columnas. tab_header() añade un título general a la tabla, no agrupa columnas.
¿Cuál de estas sintaxis produce una cita entre paréntesis en Quarto?
{@Spitzer2006}@Spitzer2006[@Spitzer2006](Spitzer2006)✓ c) [@clave] produce una cita entre paréntesis: (Spitzer et al., 2006). Sin corchetes, @clave produce una cita narrativa: Spitzer et al. (2006), adecuada para usar el nombre del autor como sujeto de la oración.
Quieres que el código de tu documento esté oculto por defecto pero que el lector pueda verlo si quiere. ¿Qué opción usas en el YAML?
echo: falsehide-code: truecode-fold: truecollapse: true✓ c) code-fold: true oculta el código pero añade un botón “Show code”. echo: false lo oculta sin posibilidad de verlo. Las otras dos opciones no existen en Quarto.
Hasta la próxima sesión
¡Gracias!
Curso de R · Universidad El Bosque · Junio 2026 · ↩︎ Sitio del curso