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

如何解决gtsummary包tbl_summary函数的by参数报错问题

问题

更新R Studio(版本2024.09.1+394)及相关包后,原本运行正常的gtsummary代码出现报错:

Error in `tbl_summary()`:
! Error processing `type` argument.
! Can't select columns that don't exist. ✖ Column `var4` doesn't exist.
ℹ Select among columns "var1", "var2", and "var3"

示例代码如下:

library(dplyr)
library(gtsummary)

# 创建示例数据
df_demo <- data.frame(
  var1 = rnorm(10),  # 连续变量1
  var2 = rnorm(10),  # 连续变量2
  var3 = sample(c("Group 1", "Group 2"), 10, replace = TRUE),  # 分类变量1
  var4 = sample(c("Yes", "No"), 10, replace = TRUE)  # 分类变量2
)

# 尝试用4个变量生成汇总表
PPF_table <- df_demo %>%
  subset(select = c(var1, var2, var3, var4)) %>%
  tbl_summary(
    missing = "no",
    by = var4,  # 按var4分组
    type = list(
      c(var1, var2) ~ "continuous",  # 指定var1、var2为连续型
      c(var3, var4) ~ "categorical"  # 指定var3、var4为分类型
    ),
    statistic = list(all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"),
    label = list(
      var1 ~ "Variable 1",
      var2 ~ "Variable 2",
      var3 ~ "Group",
      var4 ~ "Response"
    )
  ) %>%
  add_p(
    test = list(all_continuous() ~ "t.test", all_categorical() ~ "chisq.test"),
    pvalue_fun = ~style_pvalue(.x, digits = 2)
  ) %>%
  add_n()

# 输出汇总表
PPF_table

用户已重装R(4.4.2)、RStudio,更新gtsummary和dplyr包,但问题仍未解决,怀疑报错与by=参数相关。

原因分析

gtsummary新版本中,当使用by参数指定分组变量时,该变量会默认被排除在待汇总分析的变量集合之外。此时在type或label参数中引用该分组变量(如示例中的var4),就会触发"列不存在"的报错,因为程序在待汇总变量里找不到它。

解决方案

移除type和label列表中关于var4的设置即可,因为分组变量仅用于分组,无需指定类型和标签。修改后的代码如下:

library(dplyr)
library(gtsummary)

# 创建示例数据
df_demo <- data.frame(
  var1 = rnorm(10),  # 连续变量1
  var2 = rnorm(10),  # 连续变量2
  var3 = sample(c("Group 1", "Group 2"), 10, replace = TRUE),  # 分类变量1
  var4 = sample(c("Yes", "No"), 10, replace = TRUE)  # 分类变量2
)

# 生成汇总表
PPF_table <- df_demo %>%
  subset(select = c(var1, var2, var3, var4)) %>%
  tbl_summary(
    missing = "no",
    by = var4,  # 按var4分组
    type = list(
      c(var1, var2) ~ "continuous",  # 指定var1、var2为连续型
      var3 ~ "categorical"  # 指定var3为分类型
    ),
    statistic = list(all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"),
    label = list(
      var1 ~ "Variable 1",
      var2 ~ "Variable 2",
      var3 ~ "Group"
    )
  ) %>%
  add_p(
    test = list(all_continuous() ~ "t.test", all_categorical() ~ "chisq.test"),
    pvalue_fun = ~style_pvalue(.x, digits = 2)
  ) %>%
  add_n()

# 输出汇总表
PPF_table

若需对分组变量var4本身进行展示,可使用add_overall()或调整include参数明确包含var4,但通常场景下无需此操作,因为by参数已将其作为分组依据显示在表格中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:45:13