使用gt::tab_row_group报错:指定行名不存在的问题求助
问题分析与解决
错误原因
你的代码中,tab_row_group()的rows参数直接传入字符串时,gt默认会匹配表格的行名(row names),但你通过tibble()创建的islands_tbl,行名是默认的1、2、3...序列,并非name列里的岛屿名称。因此传入c("Australia", "Greenland")时,gt找不到对应行名的行,触发报错。
解决方案
要根据name列的值选择分组行,需在rows参数中使用逻辑表达式匹配name列内容,而非直接传字符串。修改后的可运行代码如下:
library(dplyr) library(gt) # 处理islands数据集 islands_tbl <- tibble( name = names(islands), size = islands ) |> arrange(desc(size)) |> slice(1:10) # 创建gt表格并按需求分组 gt_tbl <- gt(islands_tbl) |> tab_row_group( label = "continent", rows = 1:6 ) |> tab_row_group( label = "country", rows = name %in% c("Australia", "Greenland") # 通过name列匹配目标行 ) |> tab_row_group( label = "subregion", rows = name %in% c("New Guinea", "Borneo") # 通过name列匹配目标行 ) # 展示最终表格 gt_tbl
补充说明
如果一定要通过行名匹配,可先将name列设为表格行名,再使用原代码的字符串参数:
# 将name列转为行名 islands_tbl <- islands_tbl |> tibble::column_to_rownames(var = "name") # 后续可直接用行名字符串匹配 gt(islands_tbl) |> tab_row_group(label = "country", rows = c("Australia", "Greenland"))
但这种方式不符合tidyverse的操作规范,更推荐使用列匹配的逻辑表达式方案。
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

