如何让gtsummary区分单/多响应分类变量并生成正确列联表?
使用gtsummary处理多响应分类变量生成列联表
默认情况下,gtsummary会将含分隔符的多响应变量(如空格/逗号分隔的组合值)识别为单个类别,要实现按独立值统计,需先将数据转换为长格式,再生成列联表,具体步骤如下:
1. 拆分多响应变量为长格式
使用tidyr::separate_rows()函数,将多响应字段的每个值拆分为单独行。根据你的示例,字段用空格分隔,代码如下:
library(tidyr) library(gtsummary) # 假设原数据集为df df_long <- df %>% separate_rows(`Spoken Languages`, sep = " ") # 若实际为逗号分隔,替换为sep=", "
2. 生成多响应变量的列联表
用tbl_cross()基于长格式数据生成表格,此时每个独立响应值会单独统计:
tbl_cross( data = df_long, row = `Spoken Languages`, col = 性别, percent = "column" # 可选:设置百分比类型,如"row"或"column" ) %>% modify_header(label = "**Spoken Languages**") # 自定义表头样式
3. 同时展示单响应与多响应变量表格
若需在同一份输出中呈现两类变量的统计结果,可分别生成表格后用tbl_merge()合并:
# 单响应变量(如"教育程度")的列联表 tbl_single <- tbl_cross(df, row = 教育程度, col = 性别) # 多响应变量的列联表 tbl_multi <- tbl_cross(df_long, row = `Spoken Languages`, col = 性别) # 合并表格并添加分栏标题 tbl_merge( list(tbl_single, tbl_multi), tab_spanner = c("**单响应变量**", "**多响应变量**") )
经过上述处理,Spoken Languages列将展示独立的语言值(english、arabic、kurdish),并统计每个值在不同性别中的对应数量,而非原有的组合值。
内容的提问来源于stack exchange,提问作者Rawand M. Hanna
相关产品推荐
相关产品推荐

