如何在R中制作带多级分组与子汇总的美观资产负债表表格
制作带多级子组与子汇总的资产负债表表格(R语言实现)
我明白你想要的是结构清晰、层级分明的资产负债表——带多级子组缩进、自动子汇总,还能嵌入RMarkdown。之前用gt()遇到排序混乱、分组重复的问题,核心原因是数据没有按层级提前排序,gt()的分组严格遵循数据现有顺序,只要先把数据捋顺,再配合样式调整就能完美实现你的需求。
解决方案步骤(基于gt()包)
1. 先对数据按层级排序
这是解决分组混乱的关键,我们要确保同一层级的类别连续排列:
library(gt) library(dplyr) # 按「资产/负债大类 → Kat_1 → Kat_2 → Kat_3」的层级排序 erg2_sorted <- erg2 %>% arrange(main, Kat_1, Kat_2, Kat_3)
2. 构建带缩进与子汇总的表格
排序后用gt()构建表格,同时设置层级缩进和子汇总样式:
erg2_sorted %>% # 指定多层分组列,从大类到最细子组 gt(groupname_col = c("main", "Kat_1", "Kat_2", "Kat_3")) %>% # 为不同层级的分组设置递增缩进,增强视觉层级 tab_style( style = cell_text(indent = px(15)), locations = cells_group(groups = 2) # Kat_1层级缩进15px ) %>% tab_style( style = cell_text(indent = px(30)), locations = cells_group(groups = 3) # Kat_2层级缩进30px ) %>% tab_style( style = cell_text(indent = px(45)), locations = cells_group(groups = 4) # Kat_3层级缩进45px ) %>% # 为每个分组自动生成求和汇总,保留0位小数 summary_rows( groups = TRUE, columns = "Value", fns = list(Summe = ~sum(., na.rm = TRUE)), formatter = fmt_number, decimals = 0 ) %>% # 给汇总行添加灰色背景和粗体,突出显示 tab_style( style = list( cell_text(weight = "bold"), cell_fill(color = "#f0f0f0") ), locations = cells_summary() ) %>% # 添加表格标题 tab_header(title = "资产负债表(多级子组版)")
效果说明
- 排序后不会再出现
C. Liabilites分散重复的问题,所有同组数据会集中排列 - 不同层级的分组有递增缩进,结构一目了然
- 每个子组(从最细的Kat_3到最上层的main)都会自动生成求和汇总,汇总行样式突出
- 这个表格可以直接嵌入RMarkdown的代码块中,输出HTML/PDF格式都能完美显示
备选方案(用flextable包)
如果需要更灵活的自定义格式,flextable也是不错的选择,核心逻辑同样是先排序再分组汇总:
library(flextable) library(dplyr) erg2_sorted %>% group_by(main, Kat_1, Kat_2, Kat_3) %>% summarise( `Acc-Nr` = list(`Acc-Nr`), Value = sum(Value, na.rm = TRUE), .groups = "drop_last" ) %>% flextable() %>% add_header_row(values = c("层级", "明细科目", "金额"), colwidths = c(4,1,1)) %>% set_table_properties(layout = "autofit")
不过gt()在层级分组的视觉呈现上更贴合你的需求,所以优先推荐前者。
内容的提问来源于stack exchange,提问作者shghm
相关产品推荐
相关产品推荐

