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

R:如何解决嵌套汇总组内的范围重叠问题

创建无重叠嵌套分组的解决方案

你的原代码问题在于用交叉逻辑标记生成分组,导致不同组的特征范围出现重叠。要实现每个患者唯一归属、分组完全无重叠的嵌套分组,需要用逐步分层的分位数划分逻辑,而非交叉标记。

修改后的代码

set.seed(123)
library(dplyr)

# 生成模拟数据(与原代码一致)
Patient_ID = 1:5000
gender <- sample(c("Male","Female"), 5000, replace=TRUE, prob=c(0.45, 0.55)) %>% as.factor()
status <- sample(c("Immigrant","Citizen"), 5000, replace=TRUE, prob=c(0.3, 0.7)) %>% as.factor()
height = rnorm(5000, 150, 10)
weight = rnorm(5000, 90, 10)
hospital_visits = sample.int(20,  5000, replace = TRUE)
disease = sample(c(TRUE, FALSE), 5000, replace = TRUE)
my_data = data.frame(Patient_ID, gender, status, height, weight, hospital_visits, disease)

# 执行无重叠嵌套分组
final <- my_data %>%
  # 第一步:筛选男性公民
  filter(gender == "Male", status == "Citizen") %>%
  # 按身高分5组(1=最低20%,5=最高20%)
  mutate(height_group = ntile(height, 5)) %>%
  # 在每个身高组内按体重分5组
  group_by(height_group) %>%
  mutate(weight_group = ntile(weight, 5)) %>%
  ungroup() %>%
  # 在每个身高-体重组内按就医次数分5组
  group_by(height_group, weight_group) %>%
  mutate(visit_group = ntile(hospital_visits, 5)) %>%
  ungroup() %>%
  # 按嵌套分组汇总统计
  group_by(gender, status, height_group, weight_group, visit_group) %>%
  summarise(
    across(c(height, weight, hospital_visits),
           list(min = ~min(., na.rm = TRUE),
                max = ~max(., na.rm = TRUE)),
           .names = "{.col}_{.fn}"
    ),
    total_patients = n(),
    prop_disease = sum(disease)/n(),
    .groups = "drop"
  )

# 查看结果示例
head(final)

关键改进点

  1. 分层分位数划分:

    • 使用ntile()函数将每个变量均匀划分为5个等比例组(每组约20%),自动完成排序和分组,确保每组人数尽可能均衡。
    • 严格按照身高→体重→就医次数的嵌套顺序分组:先在整体男性公民中分身高组,再在每个身高组内分体重组,最后在每个身高-体重组内分就医次数组。这种方式保证了分组的完全嵌套,彻底避免范围重叠。
  2. 患者唯一性:每个患者的height_group+weight_group+visit_group组合是唯一的,不会出现同时属于多个组的情况。

  3. 清晰的统计输出:汇总时保留分组标签,同时计算各组的特征范围、患者总数和疾病比例,结果一目了然。

验证无重叠

你可以通过以下代码检查分组的范围是否完全独立:

# 检查不同身高组的身高范围
final %>%
  select(height_group, height_min, height_max) %>%
  distinct() %>%
  arrange(height_group)

输出会显示每个身高组的身高范围是连续且不重叠的(仅边界值可能重复,属于正常情况)。同理,体重和就医次数的分组范围在各自的上层分组内也是完全独立的。

内容的提问来源于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.17 18:24:56