如何用gtsummary创建含未加权n与加权百分比的特征表?
用gtsummary创建含未加权n与加权百分比的特征表
直接通过自定义统计函数,就能在gtsummary的特征表中同时展示未加权观测数和加权百分比,以下是具体实现:
步骤1:加载依赖包与构造示例数据
library(gtsummary) library(survey) library(dplyr) # 用survey包自带的示例加权数据演示 data(api) dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc)
步骤2:自定义统计量函数
这个函数会同时计算未加权观测数(n)和加权百分比,最终返回n (加权%)的格式:
custom_cat_stat <- function(data, variable, by, ...) { # 计算分组后的未加权观测数 n_counts <- data$variables %>% group_by({{by}}) %>% summarise(n = n()) %>% pull(n) # 计算分组后的加权百分比 weighted_pcts <- svyby( formula = ~{{variable}}, by = ~{{by}}, design = data, FUN = function(x) svymean(~x, design = data) * 100 ) %>% pull(2) %>% round(1) # 拼接结果 paste0(n_counts, " (", weighted_pcts, "%)") }
步骤3:生成特征表
调用tbl_summary时指定自定义统计函数,即可得到目标格式的表格:
tbl_summary( dclus1, include = c(stype, sch.wide), by = comp.imp, statistic = all_categorical() ~ custom_cat_stat, missing = "no" ) %>% modify_header(label = "**特征类别**") %>% modify_caption("特征汇总表(含未加权n与加权百分比)")
补充说明
- 如果需要处理连续变量,可另行定义统计函数,比如同时输出未加权中位数(四分位距)和加权均值(标准差),只需调整函数内的统计计算逻辑即可。
- 若你的原始数据不是survey对象,是普通数据框加权重列,可改用
dplyr::weighted.mean计算加权百分比,调整自定义函数即可。
内容的提问来源于stack exchange,提问作者McDaniels Kouamivi
相关产品推荐
相关产品推荐

