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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:21:06