在DT中添加页脚

时间:2017-03-07 15:04:51

标签: css r dt

我正在尝试在数据表的页脚中添加一个colsum

我使用https://github.com/rstudio/DT/issues/39

为1列做了这个
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
          ");",
          "}")
      )
)

我正在尝试为它做      - 所有栏目      - 所有num列(或除char id之外的所有列都更容易)

编辑:解决方案:)

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
)

2 个答案:

答案 0 :(得分:4)

不需要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

答案 1 :(得分:2)

编辑:GGamba的答案更简单,应该使用,我仍然希望保持正确的JS代码与footerCallback一起使用,以便分别处理每一列以供将来参考。

将调用插入一个for循环,从0(或任何你想要的列)结束:

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)

请注意,第一列是字符串,因此reduce连接字符串。另请注意,您可以对开始和结束之间的任何数字执行此操作。