使用 JS 的具有动态差异数量列的闪亮 DT 多级标题

Posted

技术标签:

【中文标题】使用 JS 的具有动态差异数量列的闪亮 DT 多级标题【英文标题】:shiny DT multiple levels header with dynamic difference quantity columns using JS 【发布时间】:2021-09-07 12:01:05 【问题描述】:

美好的一天。

我有一些任务。

library(shiny)
ui <- fluidPage(
  DT::dataTableOutput('tbl')
)

library(DT)

data <- data.frame(list(
  good = c('a','b','c'),
  city = c('chicago', 'denver','colorado'),
  stock = c(1,2,3),
  transit = c(4,5,6)
))

server <- function(input, output) 
  
 output$tbl <- DT::renderDataTable(
   data%>%
     tidyr::pivot_wider(names_from = city, values_from = c('stock', 'transit'),
                        values_fill = 0, names_glue = 'city_.value')%>%
     dplyr::select(order(names(.)))%>%
     dplyr::relocate(good)
 ) 
 

我需要标题是两级的,但他的列数(城市)总是不同的。 所以带容器的标准版不适合,需要马上注明列数

需要...

谢谢!!!

【问题讨论】:

【参考方案1】:

您可以使用knitr::kable。这适用于任意数量的列和任意数量的城市。

library(shiny)
library(knitr)
library(kableExtra)

ui <- fluidPage(
  htmlOutput('tbl')
)

library(DT)

data <- data.frame(list(
  good = c('a','b','c'),
  city = c('chicago', 'denver','colorado'),
  stock = c(1,2,3),
  transit = c(4,5,6)
))

server <- function(input, output) 
  
  output$tbl <- renderText(
    data%>%
      tidyr::pivot_wider(names_from = city, values_from = c('stock', 'transit'),
                         values_fill = 0, names_glue = 'city_.value')%>%
      dplyr::select(order(names(.)))%>%
      dplyr::relocate(good) -> tmp
    
    cols <- names(tmp)
    names(tmp) <- sub('.*_', '', cols)
    tmp %>%
      knitr::kable(type = 'text') %>%
      kable_styling(
        font_size = 15,
        bootstrap_options = c("striped", "hover", "condensed")
      ) %>%
      add_header_above(c('', table(sub('_.*', '', cols[-1]))))
  ) 
  


shinyApp(ui, server)

【讨论】:

以上是关于使用 JS 的具有动态差异数量列的闪亮 DT 多级标题的主要内容,如果未能解决你的问题,请参考以下文章

DT Table 中的闪亮小部件

调整/更新过滤器选择以适应闪亮的 DT 数据表中已应用的过滤器

在闪亮应用程序的 DT::datatable 中添加、删除和编辑行

表格列的R闪亮鼠标悬停文本

为 DT 数据表上的双击事件创建 R 闪亮绑定

DT::DataTables 中第一列的黑色背景和白色字体