如何用gtsummary与flextable将N和%列拆分为单独列?
拆分gtsummary分类变量表格的频数(N)与百分比(%)为独立列
要把分类变量的频数和百分比拆成单独列,你可以通过调整gtsummary的统计量输出格式,再拆分表格主体列的方式实现,具体代码如下:
library(gtsummary) library(dplyr) library(flextable) library(stringr) # 筛选目标变量 trial2 <- gtsummary::trial %>% select(trt, age, grade) # 生成汇总表并拆分N和%列 tbl <- trial2 %>% # 第一步:指定分类变量统计量为"N (%)"格式 tbl_summary( statistic = list( all_categorical() ~ "{n} ({p}%)", all_continuous() ~ "{mean} ({sd})" # 连续变量格式可按需修改 ) ) %>% # 第二步:拆分合并的统计量列 modify_table_body( ~ .x %>% separate( col = stat_0, # 单组数据用stat_0,分组数据对应stat_1/stat_2等 into = c("N", "%"), sep = " \\(", # 匹配" ("的分隔符,注意转义括号 remove = FALSE # 可选:保留原列,后续可删除 ) %>% mutate(`%` = str_remove(`%`, "\\)")) # 移除百分比列的右括号 ) %>% # 第三步:设置新列的显示标签 modify_table_cols( columns = c(N, "%"), label = c("N" = "频数", "%" = "百分比(%)") ) %>% # 转换为flextable做APA格式调整 as_flex_table() # 可选:自定义flextable的APA格式(示例) tbl <- tbl %>% align(align = "center", part = "all") %>% font(fontname = "Times New Roman", part = "all") %>% border_remove() %>% hline_bottom(part = "header", border = fp_border(width = 1))
关键说明
- 如果是分组汇总表(比如按
trt分组),需要对stat_1、stat_2等分组列分别执行拆分操作,可结合purrr循环处理 separate的sep参数必须和你设定的统计量格式匹配,确保拆分位置准确- 后续可继续用flextable的各类函数调整边框、字体、行距等,完全贴合APA格式要求
内容的提问来源于stack exchange,提问作者AndreasV
相关产品推荐
相关产品推荐

