Cuando los Gráficos No Son Suficientes
Hemos visto cómo los gráficos son herramientas excepcionales para resumir información y contar historias. Un gráfico de barras puede mostrar promedios, un gráfico de dispersión puede revelar tendencias. Pero, ¿qué pasa cuando un usuario mira el promedio y se pregunta: "Interesante, pero... quiero ver los datos exactos que componen esta barra"?
Aquí es donde las tablas interactivas se vuelven indispensables. Actúan como el complemento perfecto para las visualizaciones: mientras el gráfico ofrece la vista panorámica, la tabla proporciona la "lupa" para inspeccionar los detalles. El paquete `DT` (DataTables) es la herramienta estándar en el ecosistema Shiny para transformar un `data.frame` estático de R en una tabla HTML interactiva, rica en funcionalidades y amigable para el usuario.
Implementación Básica: `DTOutput` y `renderDT`
La implementación de una tabla interactiva con `DT` sigue el mismo patrón que cualquier otro output de Shiny: una función `...Output()` en la UI y una función `render...()` en el Server.
# En ui.R
# Creamos un contenedor en la UI para nuestra tabla
DTOutput("miTabla")
# En server.R
output$miTabla <- renderDT({
# Le pasamos nuestro dataframe a la función datatable()
datatable(datos_saber)
})
Con solo este código, obtenemos automáticamente una tabla con paginación, búsqueda global y la capacidad de ordenar las columnas. Pero el verdadero poder de `DT` reside en sus opciones de personalización.
Taller Práctico: Construyendo una Tabla Profesional
Vamos a añadir una tabla a nuestra aplicación y a potenciarla con las funcionalidades más demandadas por los usuarios de negocio.
Paso 1: Añadir Filtros por Columna
La búsqueda global es útil, pero los filtros individuales por columna son mucho más poderosos. Esto permite al usuario, por ejemplo, ver solo los colegios "OFICIALES" o filtrar por un rango de puntaje específico.
output$miTabla <- renderDT({
datatable(
datos_saber,
filter = 'top' # ¡Esta simple opción añade los filtros!
)
})
Paso 2: Habilitar Botones de Exportación
Una de las funcionalidades más valiosas para los usuarios es la capacidad de descargar los datos que están viendo. Con la extensión `Buttons`, podemos añadir fácilmente botones para copiar la tabla o exportarla a formatos comunes como CSV o Excel.
output$miTabla <- renderDT({
datatable(
datos_saber,
filter = 'top',
extensions = 'Buttons', # Habilitamos la extensión
options = list(
pageLength = 10, # Mostramos 10 filas por página
dom = 'Bfrtip', # Definimos la posición de los elementos (B = Buttons)
buttons = c('copy', 'csv', 'excel', 'pdf', 'print') # Especificamos qué botones queremos
)
)
})
Paso 3: Mejorar la Experiencia de Usuario (Traducción)
Por defecto, la tabla y sus controles están en inglés. Podemos mejorar enormemente la experiencia para usuarios de habla hispana cargando un archivo de traducción.
output$miTabla <- renderDT({
datatable(
datos_saber,
filter = 'top',
extensions = 'Buttons',
options = list(
pageLength = 10,
dom = 'Bfrtip',
buttons = list(
list(extend = 'collection', buttons = c('copy', 'csv', 'excel', 'pdf'), text = 'Exportar Datos')
),
# Añadimos la opción de lenguaje
language = list(url = '//cdn.datatables.net/plug-ins/1.10.19/i18n/Spanish.json')
)
)
})
¡Dashboard Completo!
Con esto, hemos cerrado el círculo. Ahora tienes un dashboard que no solo presenta visualizaciones y storytelling, sino que también permite a los usuarios más avanzados sumergirse en los datos, filtrarlos según sus necesidades y exportarlos para sus propios análisis. Has entregado una herramienta completa que satisface tanto al consumidor de insights como al explorador de datos.