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

基于对照组分位数范围,自动为全数据集创建分类变量

自动化基于对照组分位数的变量分组方案

问题背景

我有包含Case_Control和Age字段的数据集,需要基于Case_Control=0的对照组观测值计算Age的分位数范围,为全数据集的Age生成对应的分类变量。目前已实现手动处理流程,但因需适配多数据集及多变量,寻求自动化实现方案。

附手动实现的测试数据与R代码:

# 测试数据集
Case_Control <- c(0,1,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0)
Age <- c(25,36,45,12,24,27,38,55,82,21,34,56,69,78,25,16,17,54,59,28)
test <- as.data.frame(cbind(Case_Control, Age))

# 提取对照组并计算分位数
controls <- test %>%
  dplyr::filter(Case_Control == 0)
summary(controls$Age)

# 手动记录分位数:Q1=19, Q2=27.5, Q3=42.25
test <- test %>%
  mutate(age_group = case_when(
    Age <= 19 ~ 1,
    Age >= 19 & Age <= 27.5 ~ 2,
    Age >= 27.5 & Age <= 42.25 ~ 3,
    Age >= 42.25 ~ 4
  )) 

自动化解决方案

核心思路

  1. 提取对照组数据,自动计算指定分位数(默认四分位数)
  2. 以分位数为切割点,对全数据集的目标变量进行分组
  3. 封装成可复用函数,支持多数据集、多变量批量处理

函数实现

library(dplyr)

# 自动化分组函数
group_by_control_quantile <- function(data, group_var, target_vars, control_value = 0, probs = c(0, 0.25, 0.5, 0.75, 1)) {
  # 筛选对照组数据
  control_data <- data %>% filter({{group_var}} == control_value)
  
  # 批量处理每个目标变量
  for (var in target_vars) {
    # 计算分位数并去重,避免区间重叠
    quantile_breaks <- unique(quantile(control_data[[var]], probs = probs, na.rm = TRUE))
    # 生成分组标签
    group_labels <- 1:(length(quantile_breaks) - 1)
    # 为原数据集添加分组变量
    data <- data %>%
      mutate(!!paste0(var, "_group") := cut(
        {{var}},
        breaks = quantile_breaks,
        labels = group_labels,
        include.lowest = TRUE,
        right = FALSE
      ))
  }
  
  return(data)
}

使用示例

# 准备测试数据(注意转换变量类型)
Case_Control <- c(0,1,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0)
Age <- c(25,36,45,12,24,27,38,55,82,21,34,56,69,78,25,16,17,54,59,28)
test <- as.data.frame(cbind(Case_Control, Age))
test$Case_Control <- as.integer(test$Case_Control)
test$Age <- as.numeric(test$Age)

# 对Age变量进行分组
test_grouped <- group_by_control_quantile(test, group_var = Case_Control, target_vars = "Age")

# 查看结果
print(test_grouped)

参数说明

  • data: 输入的数据集
  • group_var: 分组变量(如示例中的Case_Control)
  • target_vars: 需要生成分组的变量向量,支持多变量(比如c("Age", "BMI"))
  • control_value: 对照组的取值(默认0,可根据实际调整)
  • probs: 分位数的概率值,默认是四分位数,可自定义(比如c(0, 0.3, 0.6, 1)生成三等分区间)

方案优势

  • 完全自动化分位数计算与分组,避免手动复制数值的误差
  • 支持多变量批量处理,一次完成多个变量的分组操作
  • 灵活调整分位数区间,适配不同研究需求
  • 自动处理重复分位数,避免区间重叠导致的分组错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:53