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

如何在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"))
  )

代码说明

  1. 自定义统计函数:hp_mean_by_group会自动按传入的分组变量(这里是cyl)计算对应组的hp均值,并用sprintf()格式化保留两位小数,符合表格的展示需求。
  2. 添加新列:add_stat()指定只给cyl变量应用这个均值函数,同时设置新列的标题为“hp Mean”。
  3. 表格清理:modify_table_body()用来调整表格内容,确保只有cyl的子组行显示对应的均值,hp的统计行不会出现空值,让表格更整洁。

这样生成的表格就会在原有的列旁边,新增一列展示每个cyl分组的hp均值啦!

内容的提问来源于stack exchange,提问作者Abbey A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:07:44