如何将fancyData合并至gtsummary生成的物种分层汇总表?
解决方案:将自定义数据插入gtsummary汇总表
前提准备
先确保两个数据集的物种/区域/季节组合完全匹配且排序一致,避免合并错位:
library(dplyr) # 对齐分组顺序 mydf <- mydf %>% arrange(物种, 区域, 季节) mydf2 <- mydf2 %>% arrange(物种, 区域, 季节)
方案一:通过modify_table_body合并外部数据
该方法直接修改gtsummary的底层数据结构,适配分层统计的表结构:
library(gtsummary) # 生成原始分层汇总表(示例:统计连续列的均值±标准差) original_tbl <- mydf %>% tbl_summary( by = c(物种, 区域, 季节), include = c(观测值1, 观测值2), # 替换为你的实际统计列 statistic = list(all_continuous() ~ "{mean} ({sd})") ) # 合并mydf2的fancyData到汇总表 modified_tbl <- original_tbl %>% modify_table_body( ~ .x %>% # 拆分分组列,提取物种/区域/季节信息 mutate( 物种 = stringr::str_split(by, "_", simplify = TRUE)[,1], 区域 = stringr::str_split(by, "_", simplify = TRUE)[,2], 季节 = stringr::str_split(by, "_", simplify = TRUE)[,3] ) %>% # 关联外部数据集获取自定义数据 left_join(mydf2, by = c("物种", "区域", "季节")) ) %>% # 设置自定义数据列的表头和格式 modify_header(fancyData ~ "自定义统计数据") %>% modify_fmt_fun(fancyData ~ function(x) x) %>% # 可根据需求调整格式(如保留2位小数) # 清理临时生成的拆分列 modify_table_body(~ .x %>% select(-物种, -区域, -季节)) # 查看结果 modified_tbl
方案二:转成gt对象后插入数据
如果gtsummary的底层修改太复杂,可将表转为gt对象后用gt的原生方法插入列:
library(gt) # 将gtsummary表转为gt对象 gt_tbl <- original_tbl %>% as_gt() # 提取mydf2的自定义数据向量 fancy_data_vec <- mydf2$fancyData # 插入自定义数据列,并调整位置 gt_tbl <- gt_tbl %>% cols_add( `自定义统计数据` = fancy_data_vec, .after = "观测值2" # 指定插入到某列之后,替换为你的目标列名 ) %>% # 可选:为特定分组数据设置格式(如春季数据加粗) tab_style( style = cell_text(weight = "bold"), locations = cells_body(columns = `自定义统计数据`, rows = grepl("春季", by)) ) # 查看结果 gt_tbl
为什么add_stat/tbl_merge失效?
add_stat仅适用于基于原始数据集计算的统计量,无法直接导入外部独立数据集;tbl_merge要求两个表的行结构完全匹配(如统计行/分组行一一对应),而分层汇总表的行结构与mydf2的单组一行结构不兼容,导致错位。
内容的提问来源于stack exchange,提问作者Shannon
相关产品推荐
相关产品推荐

