如何在flextable中以合并分组值作为表头?
用flextable实现带合并表头的分组表格
步骤1:准备数据并转成宽格式
先加载所需包,将原始数据转换为宽格式,确保列名结构清晰:
library(tidyverse) library(flextable) # 原始数据集 mydf <- data.frame( estimate = rep(c("b0", "b1", "b2"), 2), linear = rep(c("0.1(0.1)*", "0.1(0.1)*", ""), 2), quadratic = rep(c("0.1(0.1)*", "0.1(0.1)*", "0.1(0.1)*"), 2), zone = c(rep("A", 3), rep("B", 3)) ) # 转换为宽格式,生成带区域标识的列名 wide_df <- mydf %>% pivot_wider( names_from = zone, values_from = c(linear, quadratic), names_glue = "{.value}_{zone}" )
步骤2:创建带合并表头的flextable
通过add_header_row添加顶层合并表头,用colwidths指定每个表头对应的列数,实现区域A、B的表头合并:
# 初始化flextable ft <- flextable(wide_df) # 配置双层表头 ft <- ft %>% # 添加顶层合并表头:参数列占1列,区域A、B各占2列 add_header_row( values = c("参数", "区域A", "区域B"), colwidths = c(1, 2, 2) ) %>% # 修改第二层表头的显示文本 set_header_labels( estimate = "参数", linear_A = "linear", quadratic_A = "quadratic", linear_B = "linear", quadratic_B = "quadratic" ) %>% # 可选:调整样式,居中对齐+booktabs主题 align(align = "center", part = "all") %>% theme_booktabs() # 查看结果 ft
效果说明
最终表格会呈现双层表头:顶层是合并后的"区域A"和"区域B",每个区域下分别显示"linear"和"quadratic"子列,对应各参数的数值。
内容的提问来源于stack exchange,提问作者understorey
相关产品推荐
相关产品推荐

