Para los que suelen trabajar con archivos Rmarkdown desde RStudio, hoy traemos tres funciones para generar tablas en un documento pdf: kable()
, pandoc.table()
y xtable()
; de los paquetes: knitr
, pander
y xtable
, respectivamente.
Pasamos a ver cada una por separado, generando las tablas con las opciones habituales en cada caso para que puedan servir de plantilla base.
Función kable()
, del paquete knitr
Yo diría que la más sencilla de utilizar. Por defecto hace unas tablas muy bonitas. Tiene pocas opciones, así que, por un lado es muy fácil de aprender a usar pero, por otro, si queremos algo más concreto puede quedarse corta. Tal y como se afirma en si descripción: «No es su intención reemplazar a ningún otro paquete de R para hacer tablas».
Una característica a destacar es que en un pdf, si quedara muy larga la tabla para una página, por defecto kable()
la divide en dos y la continúa en la siguiente.
# install.packages("knitr")
library(knitr)
data("airquality")
df <- head(airquality, 15)
kable( df , caption = "BBDD `airquality` con `kable()`"
, align = c('l', 'c', 'r', 'r', 'c', 'l')
, col.names = c("Ozono","Solar.R","Viento","Temp","Mes","Día")
, row.names = TRUE
, digits = 1
, format.args = list( decimal.mark = ",")
)

Función pandoc.table()
, del paquete pander
Tiene bastantes opciones. Características a destacar: que también divide las tablas como kable()
si son muy largas, y además, también lo hace si son muy anchas. En este último caso, te parte la tabla automáticamente y te la muestra a continuación con las columnas que no hubieran cabido. Importante: no hay que olvidar poner results = 'asis'
en las opciones del chunk.
# install.packages("pander")
library(pander)
pandoc.table( df
, caption = "BBDD `airquality` con `pandoc.table()`"
, justify = 'lcrrcl'
, round = 2
, decimal.mark = ","
, missing = NA
, emphasize.rownames = FALSE
, split.cells = 5
, emphasize.strong.cells =
which(df > 12 & df == df$Wind, arr.ind = TRUE)
)

Función xtable()
, del paquete xtable
Potencia LaTeX
. Lo mejor es utilizarla junto con print()
, ya que, se añaden más opciones (ver print.xtable()
). Importante: igual que con pandoc.table()
hay que poner results = 'asis'
.
# install.packages("xtable")
library(xtable)
print(xtable( df
, caption = "BBDD \\texttt{airquality} con
\\texttt{xtable()}"
, align = 'clcrrcp{2cm}'
, digits = 2
, label = "tab:label"
)
, comment = FALSE
, table.placement = "h!"
, caption.placement = "top"
, NA.string = "NA"
)

Conclusiones
En resumen, para una tabla sencilla en Rmd yo personalmente utilizo la función kable()
: no hay que instalar ningún paquete adicional a knitr
y la sintaxis se aprende muy rápido. Solo cuando quiero hacer alguna tabla más concreta (o cuando es muy ancha) opto por pandoc.table()
, que te da muchas opciones sin perder la relativa sencillez. Y finalmente, en contadas situaciones, cuando he de hacer algo muy muy concreto en el que tengo que tirar de LaTeX
utilizo xtable()
.
Cada cual que utilice la que más le guste, o como yo, la que más le convenga en cada caso.
Referencias y enlaces