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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:07:50