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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:43:09