You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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):
    1. 通过nextUntil('.dtrg-group')获取当前分组下的全部数据行,统计行数得到车辆数量
    2. 将原分组标题与数量信息拼接,更新分组行的显示文本
  • 保留原有的分组折叠/展开点击交互,以及初始折叠的触发逻辑

你也可以直接在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:46:32