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)
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")
)
)
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)
)
)
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)
)
}
)
)
)
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))
)
}
)
Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad
Ir al sitio
También te puede interesar