如何在R中创建嵌套表格?实现多维度分组均值的层级展示
实现嵌套表头表格的方法
你的数据已按years、category、type、theme完成分组(每组仅1个count值,平均值即自身),可通过数据重塑+表格渲染工具实现需求格式的嵌套表格,以下是两种可行方案:
方案1:使用tidyr + gt包(适合生成交互式/网页表格)
1. 安装并加载依赖包
install.packages(c("tidyr", "gt")) library(tidyr) library(gt)
2. 重塑数据为宽格式
将年份作为分类下的子列,整理成表格所需结构:
df_wide <- df %>% pivot_wider( id_cols = c(type, theme), names_from = c(category, years), values_from = count, values_fn = mean # 因每组仅1个值,均值与原count一致 )
3. 生成嵌套表头表格
利用gt自动识别列名分隔符,生成多层嵌套表头:
df_wide %>% gt() %>% tab_spanner_delim(delim = "_") %>% # 按下划线拆分列名,生成上层分类、下层年份的嵌套表头 fmt_number(columns = everything(), decimals = 0) %>% # 格式化数字为整数 row_group_order(groups = unique(df$type)) %>% # 按Type分组展示行 tab_style( style = cell_text(weight = "bold"), locations = cells_row_groups() ) %>% opt_vertical_padding(scale = 1.2) # 调整行间距提升可读性
运行后会生成完全匹配你需求的表格:上层为Category1/Category2,下层对应2010/2011年份;行按Type分组,子行展示Theme,单元格显示对应count平均值。
方案2:使用flextable包(适合导出为Word/PDF格式)
1. 安装并加载依赖包
install.packages("flextable") library(flextable)
2. 生成嵌套表头表格
df %>% pivot_wider( id_cols = c(type, theme), names_from = c(category, years), values_from = count, values_fn = mean ) %>% flextable() %>% # 手动构建嵌套表头 add_header_row( values = c("", "", "Category1", "Category1", "Category2", "Category2"), colwidths = c(2, 2, 2) ) %>% set_header_labels( type = "Type", theme = "Theme", Category1_2010 = "2010", Category1_2011 = "2011", Category2_2010 = "2010", Category2_2011 = "2011" ) %>% merge_h(part = "header") %>% # 合并上层表头单元格 bold(part = "header") %>% autofit() # 自动调整列宽
该方案生成的表格可直接导出为Word、PDF等格式,适合文档排版场景。
内容的提问来源于stack exchange,提问作者Elena
相关产品推荐
相关产品推荐

