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

如何让survey与gtsummary报告因子变量的全部水平

解决方案

要保留因子变量v1.fac的全部水平(包括无观测的“Green”),只需在tbl_strata()函数中添加keep_factors = TRUE参数即可,该参数会强制保留所有预定义的因子水平,即使对应层没有观测数据。

修改后的完整代码

library(survey)
library(gtsummary)
library(dplyr)

df <- data.frame(v1 = c(1,1,4,4,4,4,2,4,1,1,1,2,2,2,4,2,1,2,1,4),
                 v2 = c(3,2,1,2,3,2,3,2,3,1,1,3,3,2,1,3,2,2,1,2),
                 agecat = c(1,3,1,2,3,2,3,2,3,1,2,3,1,2,1,3,1,2,1,NA),
                 str = c(1,4,1,2,3,6,5,1,4,6,3,4,5,6,1,5,3,2,1,4),
                 wgts = c(1.28,1.77,1.28,1.40,1.44,1.71,1.04,1.28,1.77,1.71,1.44,1.77,1.04,1.71,1.28,1.04,1.44,1.40,1.28,1.77))

df <- df %>% mutate(v1.fac = factor(v1, levels = c(1,2,3,4), labels = c('Red','Blue','Green','Black')),
                    v2.fac = factor(v2, levels = c(1,2,3), labels = c('Small','Medium','Large')),
                    agecat.fac = factor(agecat, levels = c(1,2,3), labels = c('<18','18-54','54+')))

tabl <- svydesign(id = ~1, strata = ~str, weights = ~wgts, data = df) %>%
  tbl_strata(strata = c('v1.fac'), 
             keep_factors = TRUE,  # 关键改动:保留所有因子水平
             .combine_with = c('tbl_merge'), 
             .tbl_fun = ~ .x %>%
               tbl_svysummary(include='agecat.fac', by='v2.fac', missing='no', label=agecat.fac~'Age', statistic=agecat.fac~'{n}') %>%
               modify_header(all_stat_cols() ~ '{level}') %>%
               modify_footnote(all_stat_cols() ~ NA))
tabl

说明

  • keep_factors = TRUE是核心参数,它会忽略层内是否有观测数据,强制保留v1.fac所有预定义的因子水平。
  • 生成的表格中“Green”层的统计值会显示为0(因为无对应观测),符合期望的展示效果。

内容的提问来源于stack exchange,提问作者seehorse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:52:15