在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
相关产品推荐
相关产品推荐

