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

如何使用gt_summary包获取不同参与者最大值的标准差?

用gt_summary获取参与者最大值的标准差

要获取所有参与者最大值的标准差,需先计算每个参与者的指标最大值,再求这些最大值的标准差,最后将该统计量整合到gt_summary表格中。以下提供两种实现方式:

方式一:在Overall列补充最大值的标准差

此方式会在原有Overall列的统计文本后追加最大值的标准差信息,保持表格结构紧凑:

library(gtsummary)
library(gt)
library(tidyverse)

# 生成可复现的示例数据
set.seed(123)
df <- tibble(participant= rep(sprintf("A%02d",1:10),2),
             role= rep(c(rep("male",6),rep("female",4)),2),
             temp = sample(seq(36,38,by=0.1),20),
             humidity = sample(seq(50,80,by=1),20))

# 计算各指标的最大值的标准差
sd_max_df <- df %>%
  group_by(participant) %>%
  summarise(across(c(temp, humidity), max)) %>% # 提取每个参与者的指标最大值
  summarise(across(everything(), sd)) %>% # 计算最大值的标准差
  pivot_longer(everything(), names_to = "variable", values_to = "sd_max")

# 生成汇总表格并整合统计量
tbl <- df %>%
  select(-role) %>% 
  tbl_summary(
    by = participant,
    missing = "no",
    statistic = list(all_continuous() ~ "{mean} ± {sd} ({max})"),
    label = list(temp ~ "Core Temperature", humidity ~ "Humidity"),
    digits = list(temp ~ 1, humidity ~ 0)
  ) %>%
  add_overall() %>%
  modify_header(label = "**Parameters**", all_stat_cols() ~ "**{level}**") %>%
  bold_labels() %>%
  # 将最大值标准差追加到Overall列
  modify_table_body(
    ~ .x %>%
      left_join(sd_max_df, by = "variable") %>%
      mutate(
        stat_overall = paste0(stat_overall, " | SD of max: ", 
                              sprintf(ifelse(variable == "temp", "%.1f", "%.0f"), sd_max))
      ) %>%
      select(-sd_max)
  ) %>%
  as_gt()

tbl

方式二:新增行单独显示最大值的标准差

此方式会在每个参数的下方新增一行,专门展示该参数所有参与者最大值的标准差,统计量更清晰:

library(gtsummary)
library(gt)
library(tidyverse)

# 生成可复现的示例数据
set.seed(123)
df <- tibble(participant= rep(sprintf("A%02d",1:10),2),
             role= rep(c(rep("male",6),rep("female",4)),2),
             temp = sample(seq(36,38,by=0.1),20),
             humidity = sample(seq(50,80,by=1),20))

# 计算各指标的最大值的标准差
sd_max_df <- df %>%
  group_by(participant) %>%
  summarise(across(c(temp, humidity), max)) %>%
  summarise(across(everything(), sd)) %>%
  pivot_longer(everything(), names_to = "variable", values_to = "sd_max")

# 生成基础汇总表格
tbl <- df %>%
  select(-role) %>% 
  tbl_summary(
    by = participant,
    missing = "no",
    statistic = list(all_continuous() ~ "{mean} ± {sd} ({max})"),
    label = list(temp ~ "Core Temperature", humidity ~ "Humidity"),
    digits = list(temp ~ 1, humidity ~ 0)
  ) %>%
  add_overall() %>%
  modify_header(label = "**Parameters**", all_stat_cols() ~ "**{level}**") %>%
  bold_labels()

# 创建显示最大值标准差的新行
new_rows <- sd_max_df %>%
  mutate(
    label = case_when(
      variable == "temp" ~ "Core Temperature (SD of max)",
      variable == "humidity" ~ "Humidity (SD of max)"
    ),
    stat_overall = sprintf(ifelse(variable == "temp", "%.1f", "%.0f"), sd_max),
    # 其他参与者列留空
    across(starts_with("stat_"), ~ ifelse(.col != "stat_overall", "", .x))
  ) %>%
  select(label, variable, starts_with("stat_"))

# 合并新行到原表格并调整顺序
tbl_final <- tbl %>%
  modify_table_body(
    ~ bind_rows(.x, new_rows) %>%
      arrange(match(variable, c("temp", "humidity")))
  ) %>%
  as_gt()

tbl_final

内容的提问来源于stack exchange,提问作者Jun Hao Kwek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:52:51