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

