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

在R中制作可导出HTML的平衡表:变量处理与输出问题问询

R制作满足需求的平衡表方案

一、解决CreateTableOne导出HTML/TeX的问题

CreateTableOne本身不直接输出HTML/TeX格式,但搭配kableExtra包就能实现,同时支持列重命名和p值显示。

示例代码

# 加载所需包
library(tableone)
library(kableExtra)
library(magrittr)

# 生成测试数据
set.seed(123)
data <- data.frame(
  group = sample(c("Control", "Treatment"), 100, replace = TRUE),
  age = rnorm(100, 50, 10),
  gender = sample(c("Male", "Female"), 100, replace = TRUE),
  # 将分类变量编码为数值型,当作连续变量处理
  score = as.numeric(sample(c("Low", "Medium", "High"), 100, replace = TRUE))
)

# 创建平衡表并计算组间比较p值
tab1 <- CreateTableOne(vars = c("age", "gender", "score"), 
                       strata = "group", 
                       data = data,
                       test = TRUE)

# 转换为可编辑数据框并重命名列
tab_df <- print(tab1, printToggle = FALSE, noSpaces = TRUE) %>%
  as.data.frame() %>%
  rename(
    "对照组" = "Control",
    "干预组" = "Treatment",
    "P值" = "p"
  )

# 导出为HTML格式
kable(tab_df, "html", caption = "两组基线特征平衡表") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover")) %>%
  save_kable("balance_table.html")

# 导出为TeX格式(可选)
kable(tab_df, "latex", caption = "两组基线特征平衡表") %>%
  kable_styling(latex_options = c("striped", "hold_position")) %>%
  save_kable("balance_table.tex")

关键说明

  • 若要将分类变量按连续变量处理,直接将其编码为数值型即可,CreateTableOne会自动计算均值/标准差。
  • 通过rename()函数可灵活修改列名。
  • 先将TableOne对象转换为数据框,再用kableExtra生成并导出HTML/TeX文件。

二、解决crosstable处理分类变量为连续变量的问题

crosstable默认识别变量类型,通过自定义统计量可强制将分类变量当作连续变量处理,同时支持HTML导出和列重命名。

示例代码

library(crosstable)
library(flextable)
library(magrittr)

# 生成测试数据
set.seed(123)
data <- data.frame(
  group = sample(c("Control", "Treatment"), 100, replace = TRUE),
  age = rnorm(100, 50, 10),
  gender = sample(c("Male", "Female"), 100, replace = TRUE),
  score = factor(sample(c("Low", "Medium", "High"), 100, replace = TRUE), 
                 levels = c("Low", "Medium", "High"))
)

# 创建crosstable,强制将score按连续变量处理并计算p值
ct <- crosstable(data, by = group, 
                 vars = c(age, gender, score),
                 # 为score指定连续变量统计量(均值±标准差)
                 funs = list(
                   score = ~mean(.x, na.rm=TRUE) ± sd(.x, na.rm=TRUE),
                   .default = c(mean_sd, prop)
                 ),
                 test = TRUE)

# 转换为flextable并重命名列
ft <- as_flextable(ct) %>%
  set_header_labels(
    Control = "对照组",
    Treatment = "干预组",
    p.value = "P值"
  )

# 导出为HTML格式
save_as_html(ft, path = "balance_table_ct.html")

关键说明

  • 利用funs参数为目标分类变量指定连续变量的统计规则,实现强制类型转换。
  • 转换为flextable对象后,通过set_header_labels()快速修改列名。
  • save_as_html()直接导出HTML文件,也可使用save_as_docx()等导出其他格式。

总结

  • 优先用CreateTableOne的话,搭配kableExtra即可覆盖所有需求,分类变量转数值型就能当作连续变量处理。
  • 偏好crosstable语法的话,自定义统计量解决变量类型问题,再用flextable完成格式调整和导出。

内容的提问来源于stack exchange,提问作者braces

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:02:48