renderdatatable entries color r datatables shiny

entries - render table shiny



Agregar Total/Subtotal a la parte inferior de una DataTable en Shiny (1)

Me gustaría poder agregar un Total / Subtotal en la parte inferior del marco de datos creado a continuación, que se muestra como una DataTable. Me gustaría que Total / Subtotal se actualice con cada filtro de DataTable aplicado. Digamos que si el usuario filtra los primeros 10 registros, me gustaría que el total calcule la suma de los primeros 10 registros o si el usuario filtra 20 registros, me gustaría que el total refleje la suma de los 20 registros, y así sucesivamente.

He pensado en una forma de lograr esto en R vinculando una nueva fila al marco de datos existente para llevar a cabo el cálculo deseado. Pero me preguntaba si hay una forma fácil de lograr esto a través de las opciones de DataTables. Algo similar a este ejemplo con la función de devolución de llamada de pie de página .

Además, haga clic aquí y aquí para ayudar con preguntas similares.

#Load required packages require(shiny) #Create a dataframe df <- data.frame(random=1:25) server <- function(input,output,session){ #Display df using DataTable and apply desired options output$display <- renderDataTable({df}) } ui <- shinyUI(fluidPage( #Add a title h1(''Testing TableTools''), mainPanel( #Display results dataTableOutput(''display'') ) )) shinyApp(ui = ui, server = server)


Aquí hay un ejemplo de cómo hacer el SubTotal de la página dada. Para obtener el total, puedes precomputarlo y luego paste en la salida JS.

library(shiny) library(DT) ui <- shinyUI(fluidPage( h1(''Testing TableTools''), mainPanel( dataTableOutput(''display'') ) )) Names <- c("",names(mtcars)) FooterNames <- c(rep("",4),Names[5:6],rep("",6)) server <- function(input, output, session) { sketch <- htmltools::withTags(table( tableHeader(Names),tableFooter(FooterNames) )) opts <- list( dom = ''Bfrtip'', buttons = list(''colvis'',''print'',list(extend=''collection'',text=''Download'',buttons = list(''copy'',''csv'',''excel'',''pdf''))), footerCallback = JS( "function( tfoot, data, start, end, display ) {", "var api = this.api(), data;", "$( api.column(5).footer()).html(''SubTotal: ''+", "api.column(5).data().reduce( function ( a, b ) {", "return a + b;", "} )", ");", "$( api.column(4).footer()).html(''SubTotal: ''+", "api.column(4).data().reduce( function ( a, b ) {", "return a + b;", "} )", ");","}") ) output$display <- DT::renderDataTable(container = sketch,extensions = ''Buttons'',options = opts,{ mtcars }) } shinyApp(ui = ui, server = server)