PACKAGE kable Y kableExtra

Visión General

El objetivo de kable y kableExtra es ayudar a construir tablas complejas comunes y manipular estilos para ellas. Básicamente puede agregar “capas” a una salida de kable de una manera similar como lo hacemos con ggplot2 y plotly, solamente que la sintaxis cambia de + a %>%.

Instalación

install.packages("kableExtra")
library(kableExtra)

#           DIRECTAMENTE DE SU REPOSITORIO
# install.packages("devtools") and library(devtools)
devtools::install_github("haozhu233/kableExtra")

Para Empezar

Cuando se usa kable(), si no se especifica el formato de salida, por defecto genera una markdown table, o podemos especificar los siguientes valores posibles:

kable(Tabla/Matriz/Data Frame, format = "latex")
kable(Tabla/Matriz/Data Frame, format = "html")
kable(Tabla/Matriz/Data Frame, format = "pandoc")
kable(Tabla/Matriz/Data Frame, format = "rst")

Es de mucha utilidad cambiar de formato markdown ya que este no admite tablas complejas. Por ejemplo, si desea tener una tabla de encabezado de doble fila, markdown no puede proporcionar la funcionalidad que necesita.

También se puede definir una opción global al principio usando la siguiente sentencia, para no repetir el paso cada vez.

knitr.table.format = "html"

Tablas básicas en HTML

Tabla <- mtcars[1:7, 1:7]
Tabla         # Tabla por defecto
kable(Tabla)  # Tabla básica de kable
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84

Cuando se utiliza en una tabla HTML kable_styling () se aplica automáticamente el tema de arranque de Twitter a la tabla.

kable(Tabla) %>%
  kable_styling()
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84

Estilos básicos para tablas

kable_styling () ofrece otras formas de personalizar el aspecto de una tabla HTML.

El argumento bootstrap_options tiene las siguientes opciones para elegir.

  • striped Para sombrear las filas, de forma intercalada, de color gris.
  • bordered Para poner bordes por cada fila y columna.
  • hover Para agregar un efecto de resaltado al pasar el mouse por una fila.
  • condensed Para condesar/reducir el espacio entre filas. Es decir que tiene una altura de fila ligeramente más corta.
  • responsive Tiene el mismo aspecto que las demás en una pantalla grande. sin embargo, en una pantalla pequeña como el teléfono, se pueden desplazar horizontalmente.
Form.Basic <- c("striped", "bordered", "hover", "condensed", "responsive")

kable(Tabla) %>%
  kable_styling(bootstrap_options = Form.Basic)
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84

Ancho, posición y tamaño de fuente

  • Si no deseamos que la tabla ocupe todo el espacio disponible, es tan fácil como poner en F el parámetro full_width.
kable(Tabla) %>%
  kable_styling(bootstrap_options = Form.Basic, full_width = F)
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84
  • La posición de la tabla solo se puede modificar cuando la tabla tiene full_width = F. Puede elegir alinear la tabla en center, left o right.
kable(Tabla) %>%
  kable_styling(bootstrap_options = Form.Basic, full_width = F,
                position = "left")
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84

Además de estas tres opciones comunes, también puede ajustar el texto alrededor de la tabla usando las opciones float_left o float_right.

kable(Tabla) %>%
  kable_styling(bootstrap_options = Form.Basic, full_width = F,
                position = "float_right")
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84

Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo Texto de ejemplo.

  • Si una tabla es enorme y desea utilizar un tamaño de fuente más pequeño, o viceversa, para esa tabla específica, puede usar la opción de font_size.
kable(Tabla) %>%
  kable_styling(bootstrap_options = Form.Basic, full_width = F, font_size = 12)
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84

Aspecto de las columnas

Tabla.Texto <- data.frame(REINO = c("Monera", "Hongos", "Vegetal"),
                          DESCRIPCION = c("Estos seres son los más antiguos. Son organismos formados por una sola célula (unicelulares) y de estructura muy simple.", "Estos se encuentran en el suelo, el agua, los organismos en descomposición o en la piel humana. Entre ellos están los mohos, las levaduras y las setas.", "Son organismos formados por más de una sola célula (pluricelulares) que realzan la fotosíntesis; gracias a la clorofila captan la energía solar."))

kable(Tabla.Texto) %>%
  kable_styling(full_width = F) %>%
  column_spec(1, bold = T,border_left = T, border_right = T,
              background = "#EAB822") %>%
  column_spec(2, width = "30em", color = "white", background = "#E0301E") 
REINO DESCRIPCION
Monera Estos seres son los más antiguos. Son organismos formados por una sola célula (unicelulares) y de estructura muy simple.
Hongos Estos se encuentran en el suelo, el agua, los organismos en descomposición o en la piel humana. Entre ellos están los mohos, las levaduras y las setas.
Vegetal Son organismos formados por más de una sola célula (pluricelulares) que realzan la fotosíntesis; gracias a la clorofila captan la energía solar.

Aspecto de las filas

kable(Tabla) %>%
  kable_styling("striped", full_width = F) %>%
  column_spec(1, bold = T) %>%
  row_spec(2:6, bold = T, color = "white", background = "#F63632")
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84

Aspecto de los encabezados

kable(Tabla) %>%
  kable_styling("striped", full_width = F) %>%
  row_spec(0, monospace = T, color = "#27BD74", angle = -45)
mpg cyl disp hp drat wt qsec
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
Duster 360 14.3 8 360 245 3.21 3.570 15.84

PACKAGE tables

Esta es una breve introducción al paquete de tables. Dicho paquete está inspirado en la función de \(\color{DarkBlue} {\texttt{SAS}}\) \(\color{Blue} {\texttt{PROC TABULATE}}\), esto con el fin de crear tablas bonitas en documentos de Sweave.

Para presentar una tabla en un documento web con la librería tables es necesario realizar principalmente dos cosas:

  1. Crear y definir la tabla mediante la función \(\color{Red} {\texttt{tabular()}}\).
  2. Imprimir y visualizar la tabla en el formato que uno lo desee (\(\color{DarkOrange} {\texttt{toHTML()}}\), \(\color{Purple} {\texttt{toLatex()}}\) o \(\color{Green} {\texttt{toKable()}}\)).

Advertencia: Para una correcta visualización de las tablas en formato HTML debe poner en el chunk la expresión \(\color{Magenta} {\texttt{results = 'asis'}}\).

A continuación, mediante un ejemplo se expone la sintaxis básica que debe seguir para obtener resultados impresionantes y de una manera muy sencilla.

TableIris <- tabular( (Species + 1) ~                 # (1)
                      (n = 1) + Format(digits = 2) *  # (2)
                      (Sepal.Length + Sepal.Width) *  # (3)
                      (mean + sd), data = iris)       # (4)
tables::toHTML(TableIris)
    Sepal.Length Sepal.Width
Species n mean sd mean sd
setosa 50 5.01 0.35 3.43 0.38
versicolor 50 5.94 0.52 2.77 0.31
virginica 50 6.59 0.64 2.97 0.32
All 150 5.84 0.83 3.06 0.44
  1. Se especifica cuáles van a hacer las filas de la tabla, en este caso por cada uno de los niveles del factor \(\texttt{Species}\), además de concatenar un \(\texttt{1}\). El \(\texttt{1}\) es un marcador de posición, que en este contexto significará “todos los grupos” (“all groups”), por lo tanto, al final se agregara una gila adicional al que se le va a calcular las estadística sin importar los niveles del factor.
  2. El operador \({\color{Orange} \sim}\) separa las especificaciones de fila de las especificaciones de columna. La primera columna corresponde a \(\texttt{(n = 1)}\). Este es otro uso del marcador de posición, pero esta vez está etiquetado como \(\texttt{n}\). Como no hemos especificado ninguna otra estadística para usar, la primera columna contiene el recuento de valores de cada categoría/nivel. \(\texttt{Format(digits = 2)}\), es una pseudo-función para establecer el formato de todas las entradas que vendrán, es decir, todos los valores que se calcularán estarán redondeados a dos decimales.
  3. \(\texttt{(Sepal.Length + Sepal.Width)}\) es una concatenación de dos variables. Ambas variables son vectores numéricos en el iris, y cada una de ellas se convierte en la variable a analizar, a su vez.
  4. \(\texttt{(mean + sd)}\) nombra dos funciones de \(\texttt{R}\). Se supone que estas son funciones operan en un vector y producen un solo valor, como lo hacen la mean() y sd(). Los valores en la tabla serán el resultado de aplicar esas funciones a las dos variables diferentes y en cada nivel del factor del dataset especificado.

Otros aspectos que considerar son:

  • justification: Da justificación de texto predeterminada para usar al imprimir. Los valores reconocidos son “n”, “l”, “c”, “r”, que representan ninguna, izquierda, centro y derecha respectivamente. Para LATEX, la justificación se especifica mediante la función table_options().
  • Para la creación de la tala en si se puede usar las funciones Hmisc::latex(), tables::latex.tabular() o tables::toLatex().
  • El operador = se utiliza para renombrar columnas. Debido a que = tiene una precedencia de operador más baja que cualquier otro operador, generalmente ponemos paréntesis alrededor de estas expresiones, es decir (Media = mean).
  • Tenga en cuenta que solo se puede especificar una función de resumen para cualquier celda de la tabla o se informará un error.
library(datasauRus)
Data <- as.data.frame(datasauRus::datasaurus_dozen)
Data$dataset <- factor(Data$dataset)
Tabla <- tabular( ( DATASET = dataset ) ~
                  (n = 1) + Format(digits = 2) *
                  ( (Coordenada_X = x) + (Coordenada_Y = y) ) *
                  ( (Media = mean) + (Sd = sd) + (Mínimo = min) + (Máximo = max) + (Mediana = median) ),
                  data = Data)

tables::toHTML(Tabla, options = htmloptions(HTMLcaption = "ANÁLISIS DESCRIPTIVO PRELIMINAR",
                                  justification = "c",
                                  pad = TRUE ))
ANÁLISIS DESCRIPTIVO PRELIMINAR
    Coordenada_X Coordenada_Y
DATASET n Media Sd Mínimo Máximo Mediana Media Sd Mínimo Máximo Mediana
away 142  54.266  16.770  15.561  91.640  53.340  47.835  26.940   0.015  97.476  47.535
bullseye 142  54.269  16.769  19.288  91.736  53.842  47.831  26.936   9.692  85.876  47.383
circle 142  54.267  16.760  21.864  85.665  54.023  47.838  26.930  16.327  85.578  51.025
dino 142  54.263  16.765  22.308  98.205  53.333  47.832  26.935   2.949  99.487  46.026
dots 142  54.260  16.768  25.444  77.954  50.977  47.840  26.930  15.772  94.249  51.299
h_lines 142  54.261  16.766  22.004  98.288  53.070  47.830  26.940  10.464  90.459  50.474
high_lines 142  54.269  16.767  17.893  96.081  54.169  47.835  26.940  14.914  87.152  32.499
slant_down 142  54.268  16.767  18.109  95.593  53.135  47.836  26.936   0.304  99.644  46.401
slant_up 142  54.266  16.769  20.210  95.261  54.261  47.831  26.939   5.646  99.580  45.292
star 142  54.267  16.769  27.025  86.436  56.535  47.840  26.930  14.366  92.215  50.111
v_lines 142  54.270  16.770  30.450  89.505  50.363  47.837  26.938   2.735  99.695  47.114
wide_lines 142  54.267  16.770  27.440  77.916  64.550  47.832  26.938   0.217  99.284  46.279
x_shape 142  54.260  16.770  31.107  85.446  47.136  47.840  26.930   4.578  97.838  39.876

Para mayor información del uso del paquete y de las demás funciones que tiene incorporadas puede consultar en la ayuda.