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

如何在gtsummary的分类水平/连续统计前显示缺失值行?

gtsummary自定义表格实现需求方案

实现步骤与代码

1. 核心配置思路

要实现「变量名与p值同行」「缺失值行前置(含0缺失场景)」「分类变量强制显示缺失值行」三个需求,需结合tbl_summary()参数配置、行顺序调整、p值样式设置来完成。

2. 完整可运行代码

library(gtsummary)
library(dplyr)
library(stringr)

# 测试数据集
df <- data.frame(col1 = c(1:3, NA),
                 col2 = c("this", NA,"is", "text"), 
                 col3 = c(TRUE, FALSE, TRUE, TRUE), 
                 col4 = c(2.5, 4.2, 3.2, NA),
                 stringsAsFactors = FALSE)

# 生成自定义表格
df %>%
  # 基础表格配置:强制显示缺失值行,定义统计量格式
  tbl_summary(
    by = col3,
    missing = "always",  # 强制分类变量显示缺失值行(即使无缺失)
    # 连续变量:先展示缺失值统计,再展示均值标准差
    statistic = list(
      all_continuous() ~ "{N_miss} ({p_miss}%)\n{mean} ({sd})"
    ),
    # 自定义变量标签(可选)
    label = list(
      col1 ~ "连续变量1", col2 ~ "分类变量1", col4 ~ "连续变量2"
    )
  ) %>%
  # 添加组间比较p值
  add_p() %>%
  # 调整行顺序:将每个变量的缺失值行移至最前面
  modify_table_body(
    ~ .x %>%
      group_by(variable) %>%
      arrange(desc(row_type == "level" & str_detect(label, "Missing")), .by_group = TRUE) %>%
      ungroup()
  ) %>%
  # 设置变量名与p值同行:仅在变量名行显示p值,清空其他行的p值
  modify_table_styling(
    columns = p.value,
    rows = row_type == "label",
    label = "p值"
  ) %>%
  modify_table_body(
    ~ .x %>%
      mutate(p.value = ifelse(row_type == "label", p.value, NA))
  ) %>%
  # 可选:加粗变量名行,增强视觉区分
  modify_table_styling(
    rows = row_type == "label",
    bold = TRUE
  )

3. 关键配置说明

  • 强制显示缺失值行:missing = "always"参数确保分类变量无论是否存在缺失,都会生成缺失值统计行;连续变量通过statistic参数直接整合缺失值计数与占比。
  • 缺失值行前置:通过modify_table_body()按变量分组,将包含「Missing」的统计行排到该变量的最顶端。
  • 变量名与p值同行:指定仅在变量名所在行(row_type == "label")显示p值,其他行清空p值内容,实现同行展示效果。

4. 最终效果

生成的表格会满足:

  • 每个变量名与对应p值在同一行(加粗突出)
  • 每个变量的第一行统计内容为缺失值数量及占比(即使缺失数为0也会显示)
  • 后续行依次展示该变量的常规统计结果(连续变量的均值±标准差、分类变量的各类别占比)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:42:12