使用tbl_svysummary时如何修改表头显示无缺失值的未加权N?
解决tbl_svysummary中{N_nonmiss_unweighted}报错问题
问题场景
需要用tbl_svysummary生成表格,要求:
- 百分比为加权值
- 表头显示未加权的无缺失值总数N
- 忽略NA值
但使用{N_nonmiss_unweighted}参数时触发报错。
原代码:
pcv_s %>% tbl_svysummary(include = (langue_eng), missing = "no", label = list(langue_eng = "Maîtrise de l'anglais"), statistic = all_categorical() ~"{n_unweighted} ({p}%)") %>% modify_header( label = "Anglais :", stat_0 = "**N = {N_nonmiss_unweighted} **") %>% modify_footnote(update = list(everything() ~ NA))
报错信息:
✖ There was an error processing column "stat_0"--likely a glue syntax error.
ℹ The following fields are available to insert via glue syntax:
column (), N (), N_unweighted (), n (), p (), n_unweighted (), p_unweighted (), level ()
Error inmap2():
ℹ In index: 2.
ℹ With name: stat_0.
Caused by error:
! Error processingmodify_*()for column 'stat_0'.
当前临时方案是手动用sum()输入数值,但不适用于批量生成表格的场景。
错误原因
从报错提示的可用glue变量列表可以看到,tbl_svysummary的modify_header中并没有内置{N_nonmiss_unweighted}这个变量,仅提供了{N_unweighted}(全样本未加权总数),无法直接调用无缺失值的未加权计数。
解决方案
先手动计算目标列的未加权无缺失值总数,再将其传入modify_header中:
- 计算未加权无缺失值数量:
# 计算langue_eng列的未加权无缺失值总数 n_unweighted_nonmiss <- sum(!is.na(pcv_s$variables$langue_eng))
- 修改后的完整代码:
pcv_s %>% tbl_svysummary(include = (langue_eng), missing = "no", label = list(langue_eng = "Maîtrise de l'anglais"), statistic = all_categorical() ~"{n_unweighted} ({p}%)") %>% modify_header( label = "Anglais :", stat_0 = glue::glue("**N = {n_unweighted_nonmiss} **") ) %>% modify_footnote(update = list(everything() ~ NA))
如果需要批量处理多列,可以将计算逻辑封装成函数,自动获取对应列的无缺失值未加权计数。
内容的提问来源于stack exchange,提问作者Saritahaha
相关产品推荐
相关产品推荐

