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

多条件筛选单药治疗数据集的实现方法

筛选一线单药治疗的患者记录(R实现)

问题背景

现有包含patient_id、diagnosis_date、diagnosis、trt_date和drug_code字段的数据集,需要筛选出**首次治疗为单药(仅A或仅B)**的患者所有记录,排除首次治疗为联合用药的患者。

原始数据集代码

# Create the dataset
data <- data.frame(
  patient_id = c(1, 1, 1, 1, 5, 5, 7, 7),
  diagnosis_date = as.Date(c("1/9/10", "1/9/10", "1/9/10", 
                             "1/9/10", "1/11/10", "1/11/10", 
                             "1/9/10", "1/9/10"), format = "%m/%d/%y"),
  diagnosis = c("breast cancer", "breast cancer", "breast cancer", 
                "breast cancer", "breast cancer", "breast cancer", 
                "breast cancer", "breast cancer"),
  trt_date = as.Date(c("1/20/10", "1/20/10", "1/21/10", 
                       "1/21/10", "1/29/10", "1/30/10", 
                       "1/25/10", "1/26/10"), format = "%m/%d/%y"),
  drug_code = c("A", "B", "A", "A", "B", "A", "A", "A")
)

解决方案(Tidyverse版本)

使用dplyr包的分组、过滤和连接操作,逻辑清晰易读:

library(dplyr)

# 核心筛选逻辑
filtered_data <- data %>%
  # 按患者分组
  group_by(patient_id) %>%
  # 计算每个患者的首次治疗日期
  mutate(first_trt = min(trt_date)) %>%
  # 筛选首次治疗日的记录,统计药物种类数
  filter(trt_date == first_trt) %>%
  distinct(drug_code) %>%
  mutate(drug_count = n()) %>%
  # 保留首次治疗为单药的患者
  filter(drug_count == 1) %>%
  select(patient_id) %>%
  # 匹配回该患者的所有原始记录
  right_join(data, by = "patient_id") %>%
  ungroup() %>%
  # 对齐期望输出的列顺序
  select(patient_id, diagnosis_date, diagnosis, trt_date, drug_code)

# 输出结果
print(filtered_data)

解决方案(Base R版本)

无需额外安装包,适合轻量场景:

# 1. 计算每个患者的首次治疗日期
first_trt_dates <- tapply(data$trt_date, data$patient_id, min)

# 2. 判断每个患者是否为首次单药治疗
is_valid <- sapply(unique(data$patient_id), function(id) {
  # 获取该患者首次治疗日的所有药物
  drugs <- data$drug_code[data$patient_id == id & data$trt_date == first_trt_dates[as.character(id)]]
  # 去重后药物数量为1则符合条件
  length(unique(drugs)) == 1
})

# 3. 筛选符合条件的患者所有记录
filtered_data_base <- data[data$patient_id %in% names(is_valid[is_valid]), ]

# 输出结果
print(filtered_data_base)

结果说明

两种方法均会得到符合要求的输出:

patient_id diagnosis_date    diagnosis  trt_date drug_code
5         2010-01-11 breast cancer 2010-01-29         B
5         2010-01-11 breast cancer 2010-01-30         A
7         2010-01-09 breast cancer 2010-01-25         A
7         2010-01-09 breast cancer 2010-01-26         A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:55:28