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

如何用R的gt包调整tab_spanner层级并转换表格列分组

问题

当前代码生成的表格中,tab_spanner 以 statistic、p.value 作为一级标题,下属不同的item编号列。现在需要反转层级,以item编号作为一级标题,下属statistic和p.value列,同时调整tab_spanner的层级,请问该如何实现?

原代码如下:

library(tidyverse)
library(tidyr)
library(gt)

# shapiro-wilk test results
sw <- tibble(
  session = c(1, 1, 2, 2, 3, 3, 4, 4),
  item = c(1, 2, 1, 2, 1, 2, 1, 2),
  statistic = runif(8),
  p.value = runif(8)
)


sw_w <- sw %>%
  pivot_wider(names_from = item, values_from = c(statistic, p.value))

gt_tbl1 <- gt(sw_w, rowname_col = "session")

gt_tbl2 <- gt_tbl1 %>%
  # create column spanners as already indicated in the column names by "_"
  tab_spanner_delim(delim = "_") %>%
  # format percentage columns
  fmt_number(columns = 2:5, decimals = 3)

gt_tbl2 %>% tab_options(container.height = px(500))
解决方案

核心思路是调整宽格式转换后的列名结构,让item编号作为列名前缀,指标(statistic/p.value)作为后缀,这样tab_spanner_delim就能自动识别层级关系。具体修改如下:

library(tidyverse)
library(tidyr)
library(gt)

# shapiro-wilk test results
sw <- tibble(
  session = c(1, 1, 2, 2, 3, 3, 4, 4),
  item = c(1, 2, 1, 2, 1, 2, 1, 2),
  statistic = runif(8),
  p.value = runif(8)
)

# 调整宽格式转换逻辑:先将指标转成long格式,再以item+指标组合生成列名
sw_w <- sw %>%
  # 把statistic和p.value转为长格式,新增metric列存储指标名称
  pivot_longer(cols = c(statistic, p.value), names_to = "metric") %>%
  # 转换为宽格式,用item和metric作为列名来源,指定列名格式为{item}_{metric}
  pivot_wider(names_from = c(item, metric), names_glue = "{item}_{metric}")

gt_tbl1 <- gt(sw_w, rowname_col = "session")

gt_tbl2 <- gt_tbl1 %>%
  # 按下划线分隔列名,自动生成以item编号为一级标题的分组
  tab_spanner_delim(delim = "_") %>%
  # 格式化数值列,保留3位小数
  fmt_number(columns = everything(), decimals = 3)

gt_tbl2 %>% tab_options(container.height = px(500))

关键修改说明

  1. 调整宽格式转换:

    • 先用pivot_longer将statistic和p.value合并为一列(metric),把数据从宽转长,方便后续按item分组生成列名
    • 再用pivot_wider转换回宽格式,通过names_glue = "{item}_{metric}"指定列名结构为item编号_指标名称,确保item编号作为列名的第一部分
  2. 层级自动识别:

    • tab_spanner_delim(delim = "_")会根据列名的下划线分隔符,自动将第一部分(item编号)作为一级标题,第二部分(statistic/p.value)作为下属列,实现层级反转的效果

内容的提问来源于stack exchange,提问作者sbac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:20:36