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

R语言:编写函数处理嵌套数据集,计算全组合疾病率

R语言实现全分组组合的疾病指标计算

核心思路

我们可以通过分位数分组+批量分组统计的方式,快速覆盖所有gender、status、身高分位、体重分位的组合,计算对应的疾病指标并合并成一个数据集。下面提供两种实用实现方式:


方法一:用dplyr快速实现(推荐)

利用tidyverse的分组统计功能,无需手动循环,代码简洁高效。

步骤1:准备数据(含示例数据生成)

先给身高、体重划分四分位,方便后续分组:

# 加载所需包
library(dplyr)

# 生成示例数据集(可替换为你的真实数据)
set.seed(123)
patient_data <- tibble(
  Patient_ID = 1:1000,
  gender = sample(c("男", "女"), 1000, replace = TRUE),
  status = sample(c("移民", "本地"), 1000, replace = TRUE),
  height = rnorm(1000, 170, 10),
  weight = rnorm(1000, 70, 8),
  disease = sample(c(0, 1), 1000, replace = TRUE, prob = c(0.7, 0.3))
)

# 为身高、体重添加四分位分组(1=最低25%,4=最高25%)
patient_data <- patient_data %>%
  mutate(
    height_quartile = ntile(height, 4),
    weight_quartile = ntile(weight, 4)
  )

步骤2:全组合统计指标

直接按所有维度分组,计算所需指标:

# 计算所有分组组合的疾病统计指标
full_stats <- patient_data %>%
  group_by(gender, status, height_quartile, weight_quartile) %>%
  summarise(
    total_patients = n(),          # 分组总人数
    disease_count = sum(disease),  # 患病数
    disease_rate = disease_count / total_patients,  # 疾病率
    .groups = "drop"  # 计算完成后取消分组结构
  )

# 查看结果示例
head(full_stats)

方法二:函数+循环实现(灵活自定义)

如果需要更复杂的自定义逻辑,可以用函数封装统计逻辑,再遍历所有可能的分组组合。

步骤1:生成所有分组组合

# 生成gender、status、身高分位、体重分位的所有可能组合
all_combinations <- expand.grid(
  gender = unique(patient_data$gender),
  status = unique(patient_data$status),
  height_quartile = 1:4,
  weight_quartile = 1:4
)

步骤2:定义统计函数

# 定义单个分组的统计函数
get_group_stats <- function(gender_val, status_val, h_q, w_q, data) {
  # 筛选对应分组的数据
  group_data <- data %>%
    filter(gender == gender_val, status == status_val, 
           height_quartile == h_q, weight_quartile == w_q)
  
  # 计算指标(处理空分组避免除以0)
  total <- nrow(group_data)
  disease_num <- sum(group_data$disease, na.rm = TRUE)
  rate <- ifelse(total == 0, NA, disease_num / total)
  
  # 返回结果行
  tibble(
    gender = gender_val,
    status = status_val,
    height_quartile = h_q,
    weight_quartile = w_q,
    total_patients = total,
    disease_count = disease_num,
    disease_rate = rate
  )
}

步骤3:遍历所有组合计算

用purrr包的pmap_dfr快速遍历并合并结果:

library(purrr)

full_stats_loop <- pmap_dfr(all_combinations, get_group_stats, data = patient_data)

# 查看结果示例
head(full_stats_loop)

注意事项

  • 若数据中存在缺失值,可在filter或sum中添加na.rm = TRUE处理。
  • ntile函数会自动将数值均匀分成指定份数,若需要自定义分位数阈值(比如用固定的身高数值划分),可替换为cut函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:42:44