如何使用R语言的kableExtra/gt包制作按变量分组列的整洁表格
实现按Variables分组列的整洁表格
要实现你期望的列分组样式,核心是先把长格式数据转换为宽格式,再利用gt包的表头分组功能来呈现。你之前的尝试是按行分组,而需求是列分组,所以需要调整数据结构后再处理。
完整解决方案代码
library(tidyverse) library(gt) # 原始数据 data <- data.frame( Name = c("Mary","Mary","Mary","Jane","Jane","Jane"), Variables = c(letters[1:3],letters[1:3]), Count = c(45, 76, 43, 23, 11, 46), Percent = c(0.45, 0.56, 0.89, 0.65, 0.88, 0.91) ) %>% arrange(desc(Name), Variables) # 1. 将长数据转宽,生成带变量前缀的列名(如a_Count、a_Percent) cols_order <- unlist(lapply(c("a", "b", "c"), function(x) paste(x, c("Count", "Percent"), sep = "_"))) data_wide <- data %>% pivot_wider( names_from = "Variables", values_from = c(Count, Percent), names_glue = "{Variables}_{.value}" # 用下划线连接变量名和指标名 ) %>% select(all_of(c("Name", cols_order))) # 调整列顺序,确保每个变量的指标连在一起 # 2. 用gt生成带分组表头的表格 data_wide %>% gt(rowname_col = "Name") %>% tab_spanner_delim(delim = "_") %>% # 按下划线拆分列名,自动生成分组表头 fmt_percent(ends_with("Percent"), decimals = 0) # 格式化百分比列,保留0位小数
关键步骤解释
- 转宽格式:
pivot_wider把每个Variables(a/b/c)对应的Count和Percent拆成独立列,names_glue保证列名格式为变量_指标,方便后续分组。 - 列顺序调整:
cols_order确保每个变量的Count和Percent相邻排列,符合你期望的布局。 - 表头分组:
tab_spanner_delim识别列名中的下划线,自动把同一变量的指标列归为一组,生成你要的a/b/c分组表头。 - 百分比格式化:
fmt_percent把小数转换为百分比格式,让表格更直观。
这样生成的表格就会完全匹配你期望的样式:每个变量(a/b/c)作为顶级表头,下面包含Count和Percent子列,行按Name(Mary/Jane)展示对应数值。
内容的提问来源于stack exchange,提问作者Shoesoff
相关产品推荐
相关产品推荐

