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

在R中按性别分组自动生成含均数(SD)/频数(百分比)的统计表格

按性别分组统计并生成指定格式表格的R实现

1. 加载所需工具包

我们使用dplyr完成数据分组统计,gt生成符合要求的表格样式:

# 未安装则先执行安装
install.packages(c("dplyr", "gt"))

library(dplyr)
library(gt)

2. 导入并预处理数据集

先将数据集加载到R环境,同时给性别变量添加清晰的分类标签:

# 导入用户提供的数据集
data <- structure(list(age = c(23, 25, 60, 12), sex = c(0, 1, 0, 1), 
    bmi = c(25, 30, 23, 24), disease = c(0, 1, 0, 1)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -4L))

# 替换性别编码为文字标签
data <- data %>%
  mutate(sex = case_when(
    sex == 0 ~ "女性",
    sex == 1 ~ "男性"
  ))

3. 编写自动识别变量类型的统计函数

这个函数会自动判断变量是连续型还是二分类型,输出对应的统计结果:

get_stats <- function(var, group_var) {
  # 连续变量(数值型且唯一值数量>2):输出均数±标准差
  if (is.numeric(var) & length(unique(var)) > 2) {
    var %>%
      group_by({{group_var}}) %>%
      summarise(stat = sprintf("%.1f±%.1f", mean(.), sd(.))) %>%
      pivot_wider(names_from = {{group_var}}, values_from = stat)
  } else {
    # 二分类变量:输出disease=1的频数(百分比)
    var %>%
      enframe(name = NULL) %>%
      mutate(value = as.integer(value == 1)) %>%
      group_by({{group_var}}) %>%
      summarise(
        n = sum(value),
        pct = sprintf("%.1f%%", mean(value)*100)
      ) %>%
      mutate(stat = sprintf("%d(%s)", n, pct)) %>%
      select(-n, -pct) %>%
      pivot_wider(names_from = {{group_var}}, values_from = stat)
  }
}

4. 批量处理变量并合并统计结果

对目标变量(年龄、BMI、患病情况)批量应用统计函数,合并成统一的结果表:

results <- bind_rows(
  get_stats(data$age, data$sex) %>% mutate(variable = "年龄"),
  get_stats(data$bmi, data$sex) %>% mutate(variable = "BMI"),
  get_stats(data$disease, data$sex) %>% mutate(variable = "患病情况")
) %>%
  relocate(variable, .before = everything())

5. 生成示例样式的表格

用gt包渲染出符合要求的表格:

results %>%
  gt() %>%
  cols_label(
    variable = "特征",
    女性 = "女性",
    男性 = "男性"
  ) %>%
  tab_header(
    title = "按性别分组的特征统计"
  ) %>%
  tab_options(
    table.width = px(400),
    header.background.color = "#f0f0f0",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid"
  )

运行上述代码后,将得到和示例样式一致的表格:连续变量展示均数±标准差,二分类变量展示患病的频数与百分比,且按性别分组呈现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:02:34