如何在gtsummary分层表格中按组展示各时间点样本量N?
使用gtsummary在分组列中显示分层样本量的实现方法
这个需求完全可以实现,通过gtsummary的分层处理函数tbl_strata结合自定义统计量或列标签修改,就能在CONTROL和FUTSAL列中展示对应时间点的组内样本量,明确缺失值分布。以下是具体实现方案:
1. 准备示例数据
先构造包含分层变量time、分组变量group及带缺失值观测的数据集:
library(gtsummary) library(tidyverse) set.seed(123) df <- tibble( time = rep(c("T0", "T1", "T2"), each = 40), group = rep(c("CONTROL", "FUTSAL"), each = 20, times = 3), value = rnorm(120) %>% replace(sample(1:120, 15), NA) # 随机生成缺失值 )
2. 方法一:将有效样本量嵌入列标题
针对每个时间分层,计算组内有效样本量(排除缺失值),并修改列标签显示组名+样本量:
df %>% tbl_strata( strata = time, .tbl_fun = function(data) { # 计算当前分层下各组的有效样本量 n_control <- sum(data$group == "CONTROL" & !is.na(data$value)) n_futsal <- sum(data$group == "FUTSAL" & !is.na(data$value)) data %>% tbl_summary( by = group, include = value, statistic = list(all_continuous() ~ "{mean} ({sd})"), label = list(value ~ "测量值") ) %>% # 更新列标题,加入有效样本量 modify_header( CONTROL ~ paste0("CONTROL (N = ", n_control, ")"), FUTSAL ~ paste0("FUTSAL (N = ", n_futsal, ")") ) } ) %>% # 分层标题添加该时间点总观测数 modify_header(all_strata() ~ "**{strata} (总N = {n})**")
3. 方法二:在统计量上方单独显示有效样本量
通过自定义统计函数,在每组统计量前展示有效样本量:
# 自定义有效样本量统计函数 n_valid <- function(x, ...) paste0("N = ", sum(!is.na(x))) df %>% tbl_strata( strata = time, .tbl_fun = function(data) { data %>% tbl_summary( by = group, include = value, statistic = list(all_continuous() ~ c("{n_valid}", "{mean} ({sd})")), label = list(value ~ "测量值") ) %>% modify_header(all_cols() ~ "**{level}**") } )
4. 方法三:快速添加组总观测数(含缺失值)
如果只需展示组内总观测数(包含缺失值),可直接用add_n函数将样本量嵌入列标题:
df %>% tbl_strata( strata = time, .tbl_fun = function(data) { data %>% tbl_summary( by = group, include = value, statistic = list(all_continuous() ~ "{mean} ({sd})"), label = list(value ~ "测量值") ) %>% add_n(location = "header") # 将组总样本量添加到列标题 } )
通过以上任意一种方法,都能清晰看到各时间分层下CONTROL和FUTSAL组的样本量,从而明确缺失值所在组(总观测数与有效样本量的差值即为缺失数量)。
内容的提问来源于stack exchange,提问作者jtjtjtjt
相关产品推荐
相关产品推荐

