在R中制作可导出为HTML的平衡表:工具适配问题求解
解决方案:用
gtsummary包制作符合要求的平衡表并导出HTML 核心工具:gtsummary
这个包完美匹配你的需求:能生成处理组/对照组的均值/组内比例列,自动计算组间差异p值,支持一键导出HTML,且分类变量的比例展示完全符合你要的P(DUMMY_VAR=1 | TREATMENT=0)格式。
步骤1:安装并加载包
install.packages("gtsummary") library(gtsummary)
步骤2:准备示例数据
这里用mtcars模拟你的数据,新增一个二分类的treatment分组变量:
# 构造数据 data(mtcars) mtcars$treatment <- ifelse(mtcars$am == 1, "处理组", "对照组") # 用am变量模拟分组 mtcars$dummy_var <- ifelse(mtcars$mpg > 20, 1, 0) # 模拟二分类哑变量
步骤3:生成平衡表
用tbl_summary()构建表格,指定分组变量,设置统计量格式,添加p值:
# 构建平衡表 balance_table <- mtcars %>% select(treatment, mpg, disp, hp, dummy_var) %>% # 选择需要展示的变量 tbl_summary( by = treatment, # 按分组变量拆分列 statistic = list( all_continuous() ~ "{mean} ({sd})", # 连续变量展示均值±标准差 all_categorical() ~ "{p}%" # 分类变量展示组内百分比(即P(变量=类别|分组)) ), label = list( mpg ~ "每加仑英里数", disp ~ "排量", hp ~ "马力", dummy_var ~ "哑变量(=1)" ) # 自定义变量标签 ) %>% add_p() %>% # 添加组间差异的p值 modify_header(label ~ "变量名称") %>% # 调整表头 bold_labels() # 加粗变量名称
步骤4:导出为HTML
直接用gtsave()导出:
gtsave(balance_table, "平衡表.html")
备选方案:tableone包配合gt导出
如果偏好CreateTableOne的输出逻辑,可以把生成的TableOne对象转换为gt表格再导出HTML:
install.packages(c("tableone", "gt")) library(tableone) library(gt) # 生成TableOne对象 tab1 <- CreateTableOne(vars = c("mpg", "disp", "hp", "dummy_var"), data = mtcars, strata = "treatment", test = TRUE) # 转换为gt表格并导出 tab1 %>% print() %>% # 先转为数据框格式 gt() %>% gtsave("平衡表_gt.html")
关于crosstable的调整说明
如果一定要用crosstable,可以通过设置percent参数为"row"来获取组内比例(即P(变量=类别|分组)):
install.packages("crosstable") library(crosstable) crosstable(mtcars, by = treatment, vars = dummy_var, percent = "row") %>% as_flextable() %>% save_as_html("平衡表_crosstable.html")
内容的提问来源于stack exchange,提问作者braces
相关产品推荐
相关产品推荐

