You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:38:38