如何在gtsummary中按指定列频率排序表格行(不修改因子水平)
不用修改因子水平的实现方案
直接借助gtsummary的modify_table_body()函数就能实现需求,无需改动value列的因子水平,具体操作如下:
- 先构造数据并生成初始摘要表格(原代码里的
group_by(group)属于冗余操作,tbl_summary(by = group)会自动完成分组统计):
library(tibble) library(gtsummary) df <- tibble( group = c("a", "a", "b", "b", "b"), value = c("h", "h", "h", "b", "h") ) initial_tbl <- df %>% tbl_summary(by = group)
- 调整表格行顺序,按group a的value频率降序排列:
final_tbl <- initial_tbl %>% modify_table_body( ~ .x %>% # 提取group a对应列中的频率数值(默认第一个分组列名为stat_1) mutate(freq_a = as.numeric(stringr::str_extract(stat_1, "\\d+"))) %>% # 按频率降序排序,确保value=h排在首位 arrange(desc(freq_a)) %>% # 移除临时生成的频率列 select(-freq_a) )
- 如果不确定group a对应的列名,可查看表格的底层数据确认:
# 打印表格的table_body部分,查看分组对应的列名 initial_tbl$table_body
找到group a对应的统计列(格式通常为stat_*),替换上述代码中的stat_1即可。
内容的提问来源于stack exchange,提问作者Ai4l2s
相关产品推荐
相关产品推荐

