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

如何让gtsummary::add_difference()在不改变列序时得到预期符号的差值

问题解答

问题2:指定gtsummary::add_difference()的差值计算方向

这是最直接的解决思路,不用折腾列序。add_difference()支持通过test.args参数传递统计检验的配置,其中ref参数可以指定参照组,直接控制差值计算为第二列减第一列(即Drug B - Drug A)。

示例代码:

library(gtsummary)

# 假设你的数据框为df,分组变量是drug,包含Drug A、Drug B两个水平
table_3 <- df %>%
  tbl_summary(by = drug) %>%
  add_difference(test.args = list(ref = "Drug A"))  # 以Drug A为参照,差值自动计算为Drug B - Drug A

这样设置后,表格列序会保持Drug A在前、Drug B在后的初始顺序,差值符号也符合预期。

另外如果你的分组变量是因子类型,要在tbl_summary()之前就用forcats::fct_relevel()把Drug A设为第一水平,这样add_difference()会默认以第一水平为参照,计算后续水平减第一水平的差值:

df <- df %>%
  mutate(drug = forcats::fct_relevel(drug, "Drug A")) %>%
  tbl_summary(by = drug) %>%
  add_difference()

你之前用relevel()没效果,大概率是在tbl_summary()生成表格之后才处理的分组变量,这时候已经晚了,不会影响差值计算逻辑。

问题1:调整table_3的列序

如果已经生成了表格需要调整列顺序,用gtsummary原生的modify_table_cols()函数最靠谱,比转成gt后调整更方便:

table_3 <- table_3 %>%
  # 按你需要的顺序指定列,stat_1对应第一组(Drug A),stat_2对应第二组(Drug B)
  modify_table_cols(columns = c("stat_1", "stat_2", "diff"))

也可以直接用列的显示名称来指定:

table_3 <- table_3 %>%
  modify_table_cols(columns = c("Drug A", "Drug B", "Difference"))

转成gt对象后列结构会嵌套,确实不好调整,优先用gtsummary自带的工具处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:57:22