Tablas Interactivas con `DT`

La Lupa del Analista: Empoderando al Usuario con Acceso al Detalle.

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.