如何在R Shiny的折叠DT表格中显示RowGroup分组计数?
实现折叠状态下显示分组车辆数量
可以通过扩展JavaScript回调逻辑,在表格初始化时为每个分组标题添加对应车辆数量,以下是具体实现代码:
修改后的完整代码
library(shiny) library(DT) ui <- fluidPage( titlePanel("Collapse/Expand table"), mainPanel(DTOutput("my_table")) ) callback_js <- JS( "table.on('click', 'tr.dtrg-group', function () {", " var rowsCollapse = $(this).nextUntil('.dtrg-group');", " $(rowsCollapse).toggleClass('hidden');", "});", "table.one('init', function() {", " $('.dtrg-group').each(function() {", " var groupRow = $(this);", " // 统计当前分组下的数据行数", " var rowCount = groupRow.nextUntil('.dtrg-group').length;", " // 更新分组标题,拼接数量信息", " var originalTitle = groupRow.text();", " groupRow.text(originalTitle + ' (' + rowCount + ' 辆)');", " });", " // 触发点击事件实现初始折叠", " $('#my_table .dtrg-group').trigger('click');", "});" ) server <- function(input, output) { output$my_table <- DT::renderDT({ datatable( mtcars[1:15, 1:5], extensions = 'RowGroup', options = list(rowGroup = list(dataSrc = 2), pageLength = 20), callback = callback_js, selection = 'none' ) }) } shinyApp(ui = ui, server = server)
代码说明
- 扩展原有回调逻辑,在表格初始化阶段遍历所有分组行(
.dtrg-group):- 通过
nextUntil('.dtrg-group')获取当前分组下的全部数据行,统计行数得到车辆数量 - 将原分组标题与数量信息拼接,更新分组行的显示文本
- 通过
- 保留原有的分组折叠/展开点击交互,以及初始折叠的触发逻辑
你也可以直接在RowGroup配置中自定义渲染函数,实现更简洁的写法:
# 替换server模块中的datatable代码段 datatable( mtcars[1:15, 1:5], extensions = 'RowGroup', options = list( rowGroup = list( dataSrc = 2, render = JS( "function(data) {", " var count = table.rows({search:'applied'}).data().filter(function(r){", " return r[2] === data;", " }).length;", " return 'cyl: ' + data + ' (' + count + ' 辆)';", "}" ) ), pageLength = 20 ), callback = callback_js, selection = 'none' )
内容的提问来源于stack exchange,提问作者Angelo
相关产品推荐
相关产品推荐

