Add footer to DT

I am trying to add colsum to the datatable footer

I did this for 1 column with https://github.com/rstudio/DT/issues/39

sketch <- htmltools::withTags(table(
  tableHeader(cars),
  tableFooter(cars)
))


datatable(cars,container = sketch, rownames = F, 
      options = list(
        footerCallback = JS(
          "function( tfoot, data, start, end, display ) {",
          "var api = this.api();",
          "$( api.column(1).footer() ).html(",
          "api.column(1 ).data().reduce( function ( a, b ) {",
          "return a + b;",
          "} )",  # remove ; here
          ");",
          "}")
      )
)

I am trying to do this for
  - all columns
  - all num columns (or all but char id are simpler)

edit: solution :)

dt_test <- structure(list(`pathologie principale` = c("Effet toxique des métaux", 
                                                  "Autres résultats anormaux des examens chimiques du sang", "Néphrite tubulo-interstitielle chronique", 
                                                  "Atteintes tubulo-interstitielles et tubulaires dues à des médicaments et des métaux lourds", 
                                                  "Autres maladies     pulmonaires obstructives chroniques", "Autres résultats anormaux de l'examen des urines"
),     Fort = c(12L, 4L, 3L, 2L, 2L, 2L), Moyen = c(2L, 0L, 0L, 0L, 1L, 1L), Faible = c(4L, 0L, 0L, 0L, 4L, 0L)),   
.Names = c("pathologie principale",                  "Fort", "Moyen", "Faible"), class = c("data.table", "data.frame"
), row.names = c(NA, -6L))


sketch <- htmltools::withTags(table(
  tableHeader(dt_test),
  tableFooter(sapply(dt_test, function(x) ifelse( (is.numeric(x)) ,sum(x)     ,"total" ))
)))


datatable(dt_test,
      container = sketch, 
      rownames = F
)
+4
source share
2 answers

No need for footerCallback:

sketch <- htmltools::withTags(table(
    tableHeader(dt_test),
    tableFooter(sapply(dt_test, function(x) if(is.numeric(x)) sum(x)))
))


datatable(dt_test,
          container = sketch, 
          rownames = F
)

enter image description here

+4
source

Edit: GGamba's answer is simpler and should be used, I still want to save the correct JS code for use with footerCallback to work on each column separately for future reference.

Insert a call into the for loop of 0 (or any column you want) to complete:

opts <- list(
footerCallback = JS(
"function( tfoot, data, start, end, display ) {",
"var api = this.api();",
sprintf("for(var i=1; i<%d; i++) {",ncol(dt_test)),
"  $( api.column(i).footer() ).html(",
"  api.column(i ).data().reduce( function ( a, b ) {",
"    if(isNaN(a)) return ''; return a+b;",
"  } )",  # remove ; here
"  );",
"}}"))

datatable(dt_test, container = sketch, options = opts)

, , . , .

+1

Source: https://habr.com/ru/post/1671717/


All Articles