Librería

reactable

Autor principal

Greg Lin

Datos de muestra

reactable convierte un data frame en una tabla HTML completamente interactiva con ordenacion, busqueda y paginacion. Las columnas son ordenables con un clic por defecto. Usaremos el dataset iris a lo largo del post.

# install.packages("reactable")
library(reactable)

head(iris, 6)

Busqueda y filtrado

searchable = TRUE anade un cuadro de busqueda global encima de la tabla. filterable = TRUE anade un filtro por columna bajo cada cabecera. defaultPageSize controla cuantas filas se muestran por pagina.

# install.packages("reactable")
library(reactable)

reactable(iris,
          searchable      = TRUE,
          filterable      = TRUE,
          defaultPageSize = 5)

colDef()

Pasa una lista con nombre a columns usando colDef() para configurar cada columna: renombrala con name, ajusta la alineacion con align y formatea numeros o fechas con colFormat().

# install.packages("reactable")
library(reactable)

reactable(
  head(iris, 10),
  columns = list(
    Sepal.Length = colDef(name   = "Sepal Length",
                          format = colFormat(digits = 1)),
    Sepal.Width  = colDef(name   = "Sepal Width",
                          align  = "left")
  )
)

Colores de celdas

El argumento style de colDef() acepta una funcion que recibe el valor de la celda y devuelve una lista de propiedades CSS. Usalo para colores de fondo condicionales, pesos de fuente o cualquier estilo inline.

# install.packages("reactable")
library(reactable)

reactable(
  head(iris, 8),
  columns = list(
    Sepal.Length = colDef(
      style = function(value) {
        bg <- if (value >= 5.5) "#cfe2ff" else "#f8d7da"
        list(background = bg)
      }
    )
  )
)

groupBy y agregacion

groupBy agrupa las filas en grupos expandibles. Combinalo con aggregate en colDef() para mostrar un resumen (media, suma, recuento…) por grupo. Usa defaultColDef para aplicar la misma agregacion a todas las columnas a la vez.

# install.packages("reactable")
library(reactable)

reactable(
  iris,
  groupBy       = "Species",
  defaultColDef = colDef(
    aggregate = "mean",
    format    = colFormat(digits = 2)
  )
)

Graficos de barras inline

El argumento cell de colDef() acepta una funcion que devuelve cualquier HTML mediante htmltools. Usalo para incrustar graficos de barras inline, iconos, etiquetas o cualquier componente personalizado dentro de una celda.

# install.packages("reactable")
library(reactable)
library(htmltools)

reactable(
  head(iris, 10),
  columns = list(
    Sepal.Length = colDef(
      cell = function(value) {
        pct <- round(value / max(iris$Sepal.Length) * 100)
        bar <- tags$div(style = paste0(
          "background:#4472C4; width:", pct,
          "%; height:14px; border-radius:3px;"
        ))
        tags$div(
          style = "display:flex; align-items:center; gap:6px;",
          bar, tags$span(value)
        )
      }
    )
  )
)

Filas expandibles

Pasa una funcion a details que recibe el indice de la fila y devuelve cualquier HTML. Aparece automaticamente una flecha desplegable en cada fila para mostrar el contenido expandido.

# install.packages("reactable")
library(reactable)

reactable(
  head(iris, 8),
  details = function(index) {
    row <- head(iris, 8)[index, ]
    tags$div(
      style = "padding: 6px 16px;",
      paste0("Ratio sepalo: ", round(row$Sepal.Length / row$Sepal.Width, 2),
             "  |  Ratio petalo: ", round(row$Petal.Length / row$Petal.Width, 2))
    )
  }
)
MASTER - STATISTICS DOT COM

Master Statistics

Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad

Ir al sitio
R PACKAGES IO

R Packages

Explora y descubre miles de paquetes, funciones y datasets de R

Ir al sitio

También te puede interesar