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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:27:47