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

如何在R Shiny的reactable表格中添加子表头并调整显示行数

在R Shiny中实现带动态子表头的reactable表格并调整默认行数

核心实现思路

  • 借助reactable的colGroups参数构建嵌套表头,结合Shiny输入控件动态更新子表头名称
  • 通过defaultPageSize参数直接将默认显示行数设为30
  • 关联外部数据框(另一张表)的对应时段数据进行渲染

完整示例代码

library(shiny)
library(reactable)
library(dplyr)

# 模拟外部数据(替换为你的实际数据)
period_data <- tibble(
  category = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
               "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
               "U", "V", "W", "X", "Y", "Z", "AA", "BB", "CC", "DD"),
  period1 = sample(1:100, 30),
  period2 = sample(1:100, 30),
  all_period = sample(1:100, 30)
)

ui <- fluidPage(
  titlePanel("动态子表头reactable示例"),
  
  # 滑块输入:调整Period 1的时段范围
  sliderInput("period1_range", "选择Period 1的时段:",
              min = 1, max = 12, value = c(1, 3)),
  
  # 滑块输入:调整Q2对应的时段范围
  sliderInput("period2_range", "选择Q2对应的时段:",
              min = 4, max = 12, value = c(4, 6)),
  
  # 渲染reactable表格
  reactableOutput("dynamic_table")
)

server <- function(input, output) {
  output$dynamic_table <- renderReactable({
    # 动态生成子表头显示文本
    period1_label <- paste0("Period 1 (", input$period1_range[1], "-", input$period1_range[2], ")")
    period2_label <- paste0("Q2 (", input$period2_range[1], "-", input$period2_range[2], ")")
    
    reactable(
      period_data,
      # 设置默认显示行数为30
      defaultPageSize = 30,
      # 构建嵌套表头分组
      colGroups = list(
        colGroup(name = "Q1", columns = "period1", header = period1_label),
        colGroup(name = "Q2", columns = "period2", header = period2_label),
        colGroup(name = "All", columns = "all_period", header = "全时段")
      ),
      # 自定义列显示名称
      columns = list(
        category = colDef(name = "类别"),
        period1 = colDef(name = "数值"),
        period2 = colDef(name = "数值"),
        all_period = colDef(name = "数值")
      )
    )
  })
}

shinyApp(ui, server)

关键细节说明

  1. 动态子表头:

    • 从滑块输入中获取时段范围,拼接成带范围信息的子表头文本
    • 用colGroups将数据列绑定到对应的主表头(Q1、Q2、All)下,通过header参数传入动态生成的子表头名称
  2. 默认行数调整:

    • 在reactable()函数中直接设置defaultPageSize = 30,即可覆盖默认的10行显示设置
  3. 外部数据关联:

    • 示例中period_data为模拟的外部数据,实际使用时替换为你的真实数据框即可,只需保证列名与colGroups中的columns参数匹配
  4. 列名自定义:

    • 通过columns参数可以为数据列设置更直观的显示名称,避免使用原始列名影响可读性

内容的提问来源于stack exchange,提问作者Leonhard Euler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:27:11