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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:01:16