更新R与RStudio后kable无法识别qwraps2样式及表头重复问题
解决qwraps2 + kbl()分组表头重复问题
问题分析
更新R/RStudio后,改用kbl()修复了kable()无法识别qwraps2样式的问题,但出现新问题:summary_statistics生成的表格自带分组标题行,同时pack_rows()又添加了一层分组标题,导致表头重复显示。
解决方案
核心思路是移除summary_table()自动生成的分组标题行,仅保留统计项行,再通过pack_rows()添加统一的分组标题。以下是修改后的完整代码:
options(qwraps2_markup = "markdown") summary_statistics <- list( "Sepal Length" = list( "N (%)" = ~qwraps2::n_perc0(!is.na(Sepal.Length), na_rm = TRUE), "Mean (SD)" = ~paste0(round(mean(Sepal.Length, na.rm = T), 1), ' (', round(sd(Sepal.Length, na.rm = T), 1), ')') ), "Sepal Width" = list( "N (%)" = ~qwraps2::n_perc0(!is.na(Sepal.Width), na_rm = TRUE), "Mean (SD)" = ~paste0(round(mean(Sepal.Width, na.rm = T), 1), ' (', round(sd(Sepal.Width, na.rm = T), 1), ')') ) ) tbl <- summary_table(iris, summary_statistics, by = 'Species') colnames(tbl) <- gsub('\\(', '\\<br\\/>\\(', colnames(tbl)) # 移除summary_table生成的分组标题行 group_titles <- names(summary_statistics) tbl_cleaned <- tbl[!tbl[[1]] %in% group_titles, ] # 生成带分组的表格 kbl(tbl_cleaned, col.names = colnames(tbl_cleaned), escape = FALSE) %>% kable_styling() %>% pack_rows('Sepal Length', 1, 2) %>% pack_rows('Sepal Width', 3, 4)
关键说明
group_titles <- names(summary_statistics):提取你定义的统计分组名称(Sepal Length、Sepal Width)tbl[!tbl[[1]] %in% group_titles, ]:筛选出第一列内容不是分组名称的行,仅保留具体统计项(N (%)、Mean (SD))- 后续
pack_rows()的分组范围需对应清理后表格的行号(这里每个分组对应2行统计项,所以范围是1-2、3-4)
如果统计分组下的项数不固定,这种基于分组名称的筛选方法比硬编码行索引更通用,能避免行号计算错误。
内容的提问来源于stack exchange,提问作者user2272972
相关产品推荐
相关产品推荐

