如何为tbl_svysummary()的列添加分组占比?
为tbl_svysummary的列标题添加分组加权占比
要实现给tbl_svysummary()生成的表格列标题(即by=参数指定的因子各水平)添加该分组在总体中的加权占比,可按以下步骤操作:
步骤1:计算分组加权占比
因为是调查数据,需基于权重计算各分组的真实占比,使用survey包的函数完成:
# 加载所需包 library(gtsummary) library(survey) # 示例调查数据(可替换为你的数据) data(nhanes, package = "survey") nhanes_design <- svydesign(id = ~SDMVPSU, strata = ~SDMVSTRA, weights = ~WTMEC2YR, data = nhanes, nest = TRUE) # 指定你的分组因子变量 factor_var <- "riagendr" # 计算各分组的加权总和与占比 group_totals <- svyby(~1, by = as.formula(paste0("~", factor_var)), design = nhanes_design, FUN = svytotal) total_weight <- sum(nhanes_design$weights) group_props <- round((group_totals$`1` / total_weight) * 100, 1) # 保留1位小数 # 整理成新的列标题(格式:分组名 (占比%)) new_col_titles <- paste0(levels(nhanes[[factor_var]]), " (", group_props, "%)") # 匹配表格统计列的命名规则(stat_1, stat_2...) names(new_col_titles) <- paste0("stat_", seq_along(new_col_titles))
步骤2:生成表格并修改列标题
用tbl_svysummary()生成基础表格后,通过modify_header()替换列标题:
# 生成原始汇总表格 base_tbl <- nhanes_design %>% tbl_svysummary( by = all_of(factor_var), # 引用分组变量 include = c(age, race, education) # 替换为你需要汇总的变量 ) # 添加占比到列标题 final_tbl <- base_tbl %>% modify_header( all_stat_cols() ~ new_col_titles[match(cur_column(), names(new_col_titles))] ) # 查看最终表格 final_tbl
说明
- 上述代码中的加权占比是基于调查权重计算的总体占比,符合
tbl_svysummary()的调查数据分析逻辑; - 若不需要加权(即普通数据而非调查数据),可直接用
table()计算占比后替换列标题; - 可根据需求调整占比的小数位数(修改
round()函数的第二个参数)。
内容的提问来源于stack exchange,提问作者Lyra Johnson
相关产品推荐
相关产品推荐

