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

如何使用flextable将表格中PLACEBO与STIM分组结果分置为两个独立列

实现步骤
  • 第一步:数据格式转换
    你当前的汇总表为长格式,每个分组对应独立行,需要先转换为宽格式,将分组信息转移到列维度,方便后续设置多层表头:
library(tidyverse)
library(flextable)

# 将长格式汇总表转为宽格式
wide_df <- comdataframetests0 %>%
  pivot_wider(
    id_cols = TEST,
    names_from = GROUP,
    values_from = c(mean_pre, se_pre, mean_post, se_post, std_diff, p_value),
    names_glue = "{.value}_{GROUP}"
  ) %>%
  # 调整列顺序,将同一分组的指标放在连续位置
  select(
    TEST,
    ends_with("_PLACEBO"),
    ends_with("_STIM")
  )
  • 第二步:生成带并列二级表头的flextable
    借助flextable的add_header_row函数即可实现二级表头的添加与列合并,代码如下:
ft <- flextable(wide_df) %>%
  # 重命名底层表头,去掉分组后缀,仅保留指标名称
  set_header_labels(
    mean_pre_PLACEBO = "mean_pre",
    se_pre_PLACEBO = "se_pre",
    mean_post_PLACEBO = "mean_post",
    se_post_PLACEBO = "se_post",
    std_diff_PLACEBO = "std_diff",
    p_value_PLACEBO = "p_value",
    mean_pre_STIM = "mean_pre",
    se_pre_STIM = "se_pre",
    mean_post_STIM = "mean_post",
    se_post_STIM = "se_post",
    std_diff_STIM = "std_diff",
    p_value_STIM = "p_value"
  ) %>%
  # 新增上层二级表头,指定各表头对应列数
  add_header_row(
    top = TRUE,
    values = c("", "PLACEBO组", "STIM组"),
    colwidths = c(1, 6, 6)
  ) %>%
  # 美化调整:表头居中、使用三线表样式
  align(align = "center", part = "header") %>%
  theme_booktabs()

# 查看生成的表格
ft
  • 可选:从原始数据集生成汇总表
    如果你需要从你提供的out原始数据集先计算统计量得到汇总表,可运行以下代码:
comdataframetests0 <- out %>%
  group_by(TEST, GROUP) %>%
  summarise(
    mean_pre = mean(score_pre),
    se_pre = sd(score_pre)/sqrt(n()),
    mean_post = mean(score_post),
    se_post = sd(score_post)/sqrt(n()),
    # 可按你的统计方法补充std_diff和p_value的计算逻辑
    .groups = "drop"
  )

运行上述代码后得到的表格,顶部会出现并列的二级分组表头,和你提供的示例图效果一致。

内容的提问来源于stack exchange,提问作者12666727b9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:01