如何用R的gt包实现企鹅数据按物种、岛屿分两行分组并美化?
解决gt包分组行分两行显示并自定义样式的问题
要实现物种分组在上、岛屿分组在下的两行显示效果,同时为不同层级分组设置不同背景色,可按以下方式修改代码:
核心实现思路
- 利用Markdown换行标签
<br>将合并的分组内容拆分为两行 - 通过
cells_row_groups()的level参数区分一级(物种)和二级(岛屿)分组,分别配置样式
完整代码
library(palmerpenguins) library(gt) # 处理数据集缺失值 penguins_no_na <- na.omit(penguins) # 构建表格并配置分组样式 penguins_no_na |> gt(groupname_col = c("species", "island")) |> # 转换分组文本:拆分后用换行符分隔并加粗 text_transform( locations = cells_row_groups(), fn = function(x) { lapply(x, function(item) { # 按默认分隔符拆分分组内容 parts <- strsplit(item, split = " - ")[[1]] # 用<br>实现换行,同时为所有内容添加加粗格式 gt::md(paste0("**", paste(parts, collapse = "<br>**"), "**")) }) } ) |> # 设置一级分组(物种)样式:黄色背景、黑色加粗文本 tab_style( style = list( cell_fill(color = "yellow"), cell_text(color = "black", weight = "bold") ), locations = cells_row_groups(level = 1) ) |> # 设置二级分组(岛屿)样式:蓝色背景、黑色加粗文本 tab_style( style = list( cell_fill(color = "blue"), cell_text(color = "black", weight = "bold") ), locations = cells_row_groups(level = 2) )
代码说明
- 换行效果:在
text_transform中,将拆分后的分组内容用<br>连接,gt会自动解析Markdown标签实现换行 - 层级区分:
level = 1对应第一级分组(species),level = 2对应第二级分组(island),以此实现不同背景色的精准设置 - 文本样式:直接通过
cell_text(weight = "bold")设置加粗,替代手动拼接格式字符串,代码更简洁易维护
内容的提问来源于stack exchange,提问作者lalu thomas
相关产品推荐
相关产品推荐

