如何在R语言gtsummary包的tbl_summary表格中按行组添加数值变量均值列
嗨!我完全明白你想要的效果——给cyl的每个子组行添加对应的hp均值列,而不是把hp的整体统计单独作为一行放在表格里。这里有个精准的解决方案,用gtsummary的add_stat()配合自定义函数就能实现:
完整代码示例
# 安装并加载所需包 install.packages("gtsummary") library(gtsummary) library(dplyr) # 准备数据 data(mtcars) df <- mtcars %>% select(cyl, hp) # 定义自定义统计函数:按cyl分组计算hp均值并格式化 hp_mean_by_group <- function(data, variable, ...) { data %>% group_by({{ variable }}) %>% summarise(mean_hp = mean(hp, na.rm = TRUE)) %>% mutate(mean_hp = sprintf("%.2f", mean_hp)) %>% # 保留两位小数 pull(mean_hp) } # 生成带均值列的统计表格 tbl_summary(df) %>% # 给cyl变量添加hp均值列 add_stat( fns = list(cyl ~ hp_mean_by_group), label = list(cyl ~ "hp Mean") # 设置新列的标题 ) %>% # 清理表格:只在cyl子组行显示均值,hp行留空 modify_table_body( ~ .x %>% mutate( stat_2 = ifelse(variable == "cyl" & !is.na(value), stat_2, "") ) %>% filter(!(variable == "hp" & stat_type == "add_stat")) )
代码说明
- 自定义统计函数:
hp_mean_by_group会自动按传入的分组变量(这里是cyl)计算对应组的hp均值,并用sprintf()格式化保留两位小数,符合表格的展示需求。 - 添加新列:
add_stat()指定只给cyl变量应用这个均值函数,同时设置新列的标题为“hp Mean”。 - 表格清理:
modify_table_body()用来调整表格内容,确保只有cyl的子组行显示对应的均值,hp的统计行不会出现空值,让表格更整洁。
这样生成的表格就会在原有的列旁边,新增一列展示每个cyl分组的hp均值啦!
内容的提问来源于stack exchange,提问作者Abbey A.
相关产品推荐
相关产品推荐

