如何让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
相关产品推荐
相关产品推荐

