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

适配期刊要求:如何将gtsummary表格空单元格替换为NA?

解决gtsummary表格中空单元格替换为NA的问题

问题背景

期刊要求表格所有空单元格标记为NA,尝试以下代码未达到预期效果:

library(gtsummary)

glm(response ~ age + stage, trial, family = binomial) %>% 
  tbl_regression( exponentiate = TRUE) %>% 
  modify_table_body(
    ~.x %>%
      mutate(
        across(all_stat_cols(), ~gsub("^0.*", "NA", .))
      )
  )

使用everything()替代all_stat_cols()时出现报错:

Error in map():
ℹ In index: 1.
Caused by error in mutate():
ℹ In argument: ~gsub("^0.*", "NA", .).
Caused by error:
! ~gsub("^0.*", "NA", .) must be a vector, not a object.

问题分析

  1. 原代码用gsub("^0.*", "NA", .)尝试替换以0开头的内容,但空单元格在gtsummary的表格数据框中并非以"0..."形式存在,而是NA或空字符串,因此匹配不到目标内容。
  2. 使用everything()会包含非字符类型的列(如整数、因子列),而gsub仅能处理字符向量,触发类型不匹配的错误。

可行解决方案

方案1:精准定位统计列并替换空/缺失值

筛选出字符类型的统计列,将空字符串和缺失值统一替换为"NA":

library(gtsummary)
library(dplyr)

glm(response ~ age + stage, trial, family = binomial) %>% 
  tbl_regression(exponentiate = TRUE) %>% 
  modify_table_body(
    ~ .x %>%
      mutate(
        across(
          where(~is.character(.x) & starts_with("stat_")),
          ~ ifelse(is.na(.) | . == "", "NA", .)
        )
      )
  )

方案2:使用gtsummary内置函数处理

利用gtsummary原生的modify_fmt_fun()函数,直接对统计列的缺失值进行格式化:

library(gtsummary)

glm(response ~ age + stage, trial, family = binomial) %>% 
  tbl_regression(exponentiate = TRUE) %>% 
  modify_fmt_fun(
    all_stat_cols(),
    ~ ifelse(is.na(.), "NA", .x)
  )

说明

  • 方案1灵活性更强,可同时处理空字符串和缺失值两种情况;
  • 方案2贴合gtsummary的设计逻辑,代码更简洁,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:55:24