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

如何在tbl_summary表格中替换Controls/Yes的0(0%)为NA并移除对应Overall列

解决方案:调整tbl_summary表格的两个需求

问题背景

在科研项目中使用tbl_summary制作人口学表格时,antibodies变量仅适用于Cases组,Controls组的该变量值均为'No',需解决以下两个问题:

  1. 将表格中Controls组/Yes行的0(0%)替换为NA(或空值)
  2. 移除antibodies部分的Overall列内容,但保留表格其他特征的Overall列

当前代码

tbl_summary(
  data,
  by = group, missing='no',
  type = all_dichotomous() ~ "categorical",
  statistic = list(
    all_categorical() ~ "{n} ({p}%)",
    all_continuous() ~ "{mean} ({sd})"
  ),
    include = c('age', 'sex', 'n_observations','antibodies'),
) %>%
  add_p(pvalue_fun = function(x) style_pvalue(x, digits = 2), include=-antibodies) %>%
  modify_header(p.value = ("**P Value**"))%>%
  add_overall() %>%
  modify_caption("**Table 1** (N = {N})")

当前生成的表格

CharacteristicOverallCases(N=85)Controls(N=85)P Value
Sex
Female77(45%)43(52%)34(40%)0.17
Male93(55%)42(49%)52(60%)
Antibodies Detected
No140 (82%)55 (65%)85 (100%)
Yes30 (18%)30 (35%)0 (0%)

修改后的代码

通过modify_table_body和modify_cell实现需求,代码如下:

library(gtsummary)
library(tidyverse)

tbl_summary(
  data,
  by = group, missing='no',
  type = all_dichotomous() ~ "categorical",
  statistic = list(
    all_categorical() ~ "{n} ({p}%)",
    all_continuous() ~ "{mean} ({sd})"
  ),
  include = c('age', 'sex', 'n_observations','antibodies'),
) %>%
  add_p(pvalue_fun = function(x) style_pvalue(x, digits = 2), include=-antibodies) %>%
  modify_header(p.value = ("**P Value**")) %>%
  add_overall() %>%
  # 替换Controls/Yes的0(0%)为NA
  modify_table_body(
    ~ .x %>%
      mutate(
        stat_3 = ifelse(variable == "antibodies" & label == "Yes", 
                        ifelse(stat_3 == "0 (0%)", NA, stat_3), 
                        stat_3)
      )
  ) %>%
  # 移除antibodies部分的Overall列内容
  modify_table_body(
    ~ .x %>%
      mutate(
        stat_1 = ifelse(variable == "antibodies", NA, stat_1)
      )
  ) %>%
  # 将NA显示为空字符串,优化表格视觉效果
  modify_cell(
    update = list(
      stat_1 = ~ ifelse(is.na(.x), "", .x),
      stat_3 = ~ ifelse(is.na(.x), "", .x)
    )
  ) %>%
  modify_caption("**Table 1** (N = {N})")

代码说明

  1. 替换Controls/Yes的0(0%):
    在modify_table_body中,通过判断variable为antibodies且label为Yes的行,将Controls列(对应stat_3,add_overall后列顺序为Overall=stat_1、Cases=stat_2、Controls=stat_3)的0 (0%)替换为NA。
  2. 移除antibodies的Overall列:
    同样在modify_table_body中,将variable为antibodies的所有行的Overall列(stat_1)值设为NA。
  3. 优化NA显示:
    使用modify_cell将NA转换为空字符串,让表格更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:55:16