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

如何在GT包中实现多区域的行分组功能?

GT包多区域行分组实现方法问题

我正在查阅GT包的tab_row_group文档,文档表述清晰但未明确说明多区域行分组的实现方法。目前我已成功实现Nevada区域的行分组,想了解如何为California、Arizona、Utah这三个区域实现相同的分组效果。

示例数据与尝试代码

library(gt)
library(dplyr)

order2 <- c(1,1,2,2,3,3,4,4)
area2 <- c("Nevada", "Nevada", "California", "California", "Arizona", "Arizona", "Utah", "Utah")
estemp2 <- c(100,200,105,205,300,305,400,405)
projemp2 <- c(110,115,210,215,310,315,410,415)

test <- data.frame(order2,area2,estemp2,projemp2)

# 仅实现了Nevada区域的分组
testitem <- test %>% gt %>% tab_row_group(label = "Nevada", rows = order2 < 2)

期望输出

estemp       projemp
  Nevada                  100           110
                          200           115
  California              105           210
                          205           215
  Arizona                 300           310
                          305           315
  Utah                    400           410
                          405           415

解决方案

方法1:链式调用tab_row_group

直接多次调用tab_row_group函数,为每个区域单独指定分组标签和筛选条件,最后隐藏不需要展示的辅助列:

testitem <- test %>%
  gt() %>%
  tab_row_group(label = "Nevada", rows = order2 == 1) %>%
  tab_row_group(label = "California", rows = order2 == 2) %>%
  tab_row_group(label = "Arizona", rows = order2 == 3) %>%
  tab_row_group(label = "Utah", rows = order2 == 4) %>%
  cols_hide(columns = c(order2, area2))

方法2:批量循环创建分组

如果区域数量较多,可利用area2列的唯一值循环批量创建分组,更简洁高效:

testitem <- test %>%
  gt() %>%
  {
    gt_obj <- .
    # 遍历所有唯一区域值
    for (area in unique(test$area2)) {
      gt_obj <- gt_obj %>%
        tab_row_group(label = area, rows = area2 == area)
    }
    gt_obj
  } %>%
  cols_hide(columns = c(order2, area2))

两种方法都能实现你想要的多区域行分组效果,运行后即可得到与期望一致的表格输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:50:28