如何在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
相关产品推荐
相关产品推荐

