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

如何用R的DT包创建带RowSpan(跨行合并)的数据表?

用DT包实现跨行合并表头的数据表解决方案

要实现你需要的跨行表头表格,核心是保证HTML表头的结构逻辑正确——跨行单元格(rowspan)会占据下一行的对应位置,同时表头列数要和数据列数匹配。以下是修正后的完整代码:

library(DT)
library(htmltools)

numPeople <- 6

# 构建跨行表头的HTML结构
sketch <- withTags(table(
  class = 'display',
  thead(
    # 第一行:空标题列 + Person1至Person6
    tr(
      th(""),
      lapply(paste0("Person", 1:numPeople), th)
    ),
    # 第二行:"偏好"跨行2行 + 每个Person对应"颜色"子表头
    tr(
      th(rowspan = 2, "偏好"),
      lapply(rep("颜色", numPeople), th)
    ),
    # 第三行:每个Person对应"口味"子表头(第一列被上一行的"偏好"占据)
    tr(
      lapply(rep("口味", numPeople), th)
    ),
    # 第四行:"最不偏好"跨行2行 + 每个Person对应"颜色"子表头
    tr(
      th(rowspan = 2, "最不偏好"),
      lapply(rep("颜色", numPeople), th)
    ),
    # 第五行:每个Person对应"口味"子表头(第一列被上一行的"最不偏好"占据)
    tr(
      lapply(rep("口味", numPeople), th)
    )
  )
))

# 构造示例数据(列数与表头完全匹配)
set.seed(123)
df <- data.frame(
  Group = c(rep("", 2), rep("", 2)),
  Person1 = c(sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1),
              sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1)),
  Person2 = c(sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1),
              sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1)),
  Person3 = c(sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1),
              sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1)),
  Person4 = c(sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1),
              sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1)),
  Person5 = c(sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1),
              sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1)),
  Person6 = c(sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1),
              sample(c("红","蓝","绿"),1), sample(c("巧克力","香草","草莓"),1))
)

# 生成最终表格
datatable(df, container = sketch, rownames = FALSE)

关键说明

  1. 表头结构逻辑:设置rowspan=2的单元格会自动占据下一行的对应位置,因此下一行无需重复编写该位置的表头元素
  2. 列数匹配:表头的总列数必须和数据框的列数一致,这里我们通过添加空列来对应左侧的分组表头(偏好/最不偏好)
  3. DT渲染规则:使用container参数传入自定义表头后,DT会自动识别跨行/跨列的HTML属性,正确渲染复杂表头

内容的提问来源于stack exchange,提问作者karyn-h

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:55:26