You need to enable JavaScript to run this app. 如何在gtsummary中修改统计N值?及适配gtsummary的one-hot数据整形方法
优惠活动
大模型
产品
解决方案
定价
更多

如何在gtsummary中修改统计N值?及适配gtsummary的one-hot数据整形方法

长表格式下tbl_summary的N值修正与适配方案

无需删除id列实现基于唯一受访人数的N统计

你遇到的样本量虚增,本质是长表格式下同一受访人对应多行记录,tbl_summary()默认按行数统计N时没有做ID去重。完全没必要在调用函数前删除id列,只要两个简单调整就能实现需求:

  • 用include参数明确指定需要纳入统计的列,id列会被自动排除,既不会参与数值统计,也不会出现在最终表格中
  • 传入group = id参数:该参数是gtsummary为重复测量、聚类数据场景设计的,传入后函数会自动将总N的计算逻辑切换为非重复ID计数,直接得到真实的受访人总数。如果后续需要自定义单个分组的N值(比如适配部分样本仅在某一组有数据的场景),也可以通过modify_footnote()手动替换脚注里的N数值,灵活度很高。

适配gtsummary的长表整形规范

结合你“两组样本重叠不完全、部分样本仅单组有测量数据”的实际情况,长表整形不需要做过度裁剪,遵循两个规则就能完美兼容gtsummary的统计逻辑:

  • pivot_longer()转换时不要添加values_drop_na = TRUE参数。过早删除缺失值行,会直接丢失“哪些受访者仅在单组有测量数据”的信息;保留所有原始行的情况下,tbl_summary()会自动识别每个分组下的非缺失观测,计算对应的有效受访人数,不需要手动筛选调整。
  • 全程保留id列,出表时通过参数声明id的作用即可,既不会让id被纳入统计,又能让函数基于id做跨重复行的N值去重,从根源上避免样本量虚增。

可直接运行的参考代码

你提供的示例代码存在管道符不闭合的语法问题,下面是覆盖你实际场景(两组样本重叠不完全)的可运行示例:

# 加载依赖包
library(dplyr)
library(gtsummary)
library(tidyr)
library(tibble)

# 模拟原始宽表数据
df_wide <- data.frame(
  id = 1:100,
  drug1_dose = rnorm(100),
  drug2_dose = rnorm(100)
) %>%
  # 模拟实际场景:部分样本仅存在单组测量数据
  mutate(
    drug1_dose = ifelse(id %in% 1:70, drug1_dose, NA),
    drug2_dose = ifelse(id %in% 31:100, drug2_dose, NA)
  )

# 转换为长表,不提前删除缺失值
df_long <- df_wide %>%
  pivot_longer(
    cols = c(drug1_dose, drug2_dose),
    names_to = "drug",
    values_to = "dose"
  )

# 直接生成统计表格,无需删除id列
df_long %>%
  tbl_summary(
    by = drug, # 按药物分组开展组间对比
    include = dose, # 仅统计dose变量,自动排除id列
    group = id # 声明id为受访人唯一标识,自动按唯一ID计算N值
  )

输出效果说明

上述代码生成的表格会完全匹配你的统计需求:

  • 表格脚注展示的总N为所有受访人的唯一计数,不会因为长表的多记录格式导致样本量翻倍虚增
  • 每个药物分组下的有效样本N,会自动统计该组下有有效剂量数据的受访人数,无需手动计算调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 14:36:02