R语言:在gt表格中按列前缀规则添加行内换行
解决方案
步骤说明
核心思路是先将B列按指定规则合并成带换行标记的单列,再通过gt的markdown解析实现换行,同时保留图标转换逻辑:
- 重组数据:把B1-B10按
B1-B3、B4-B6、B7-B9、B10分成4组,组间用<br>标记换行,组内元素用空格分隔保证横向排列。 - 启用markdown解析:让gt识别
<br>为换行符,实现分组换行。 - 图标转换:将每个元素替换为对应图片标签,同时保留分组换行结构。
- 调整间距:设置行内文字行高,让分组既紧凑又清晰分隔。
完整代码
library(gt) library(purrr) library(stringr) # 原始数据框 Test <- structure(list(A1 = c("SP2", "SP1"), A2 = c(NA_character_, NA_character_ ), B1 = c("AP2", "HN2"), B2 = c("HN2", "IP2"), B3 = c("HP2", "KN2"), B4 = c("IN2", "KP2"), B5 = c("JN2", "NP2"), B6 = c("KN2", "RN2"), B7 = c("KP2", "SN2"), B8 = c("NP2", "TP2"), B9 = c("RN2", "AP1"), B10 = c("SN2", "FP1")), row.names = c(NA, -2L), class = "data.frame") # 数据预处理:合并B列分组 Test_processed <- Test %>% mutate( B_group = paste0( paste(B1, B2, B3, sep = " "), "<br>", paste(B4, B5, B6, sep = " "), "<br>", paste(B7, B8, B9, sep = " "), "<br>", B10 ) ) %>% select(A1, A2, B_group) # 保留需要的列 # 生成带分组换行的gt表格 Test_processed %>% gt() %>% fmt_markdown(columns = everything()) %>% # 启用markdown解析,识别<br>换行 # tab_options(column_labels.hidden = TRUE) # 如需隐藏列标签可取消注释 text_transform( locations = cells_body(columns = everything()), fn = function(x) { map_chr(x, function(cell_content) { if(is.na(cell_content)) return("") # 处理NA值 # 拆分分组和元素,转换为图片标签 groups <- str_split(cell_content, "<br>")[[1]] group_images <- map_chr(groups, function(group) { elements <- str_split(group, " ")[[1]] paste0(map_chr(elements, ~ local_image(filename = paste0(.x, ".png"), height = 15)), collapse = " ") }) # 重新拼接带换行的图片标签 paste0(group_images, collapse = "<br>") }) } ) %>% tab_style( style = cell_text(line_height = 1.2), # 调整行高,保证分组间距紧凑清晰 locations = cells_body() )
关键细节解释
- 分组合并:通过
paste0和<br>实现分组换行标记,组内用空格分隔确保图标横向并排。 - 图标转换逻辑:先按
<br>拆分分组,再拆分每组内的元素,逐个转换为图片标签后重新拼接,保留换行结构。 - 间距调整:
line_height = 1.2让分组间的垂直间距既紧凑又不会过于拥挤,保证视觉分隔清晰。
内容的提问来源于stack exchange,提问作者Essi
相关产品推荐
相关产品推荐

