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

如何筛选布洛芬服用后至死亡前使用的其他药物(R语言)

问题

需要统计养老院中服用多种药物的患者,在服用布洛芬(ibuprofen)之后到死亡前这段时间内使用过的其他药物,并筛选出符合条件的药物记录。

输入数据

原始R数据构造代码:

id <- c('1', '1', '1','1','2','2','2')
drug <- c('ibuprofen','aleve','tylenol','claritin', 'ibuprofen','aleve','tums')
start <- c('100','105','50','115','20','-9','30')
death <- c('120','120','120','120','50','50','50')
df <- data.frame(id, drug, start, death, stringsAsFactors = FALSE)
期望输出

最终需要得到的结果数据:

id <- c('1','1','2')
drug <- c('aleve','claritin','tums')
start <- c('105','115','30')
result_df <- data.frame(id, drug, start, stringsAsFactors = FALSE)
现有代码

目前仅完成了筛选服用布洛芬的患者:

y <- df %>%
  filter(drug == "ibuprofen")
完整解决方案

要实现时间范围筛选,需要先处理时间类型,再关联对比,完整代码如下:

# 1. 转换时间列为数值型(原始数据是字符串,无法做大小比较)
df$start <- as.numeric(df$start)
df$death <- as.numeric(df$death)

# 2. 提取每个患者服用布洛芬的时间和死亡时间
ibuprofen_info <- df %>%
  filter(drug == "ibuprofen") %>%
  select(id, ibuprofen_start = start, death)

# 3. 筛选符合时间条件的其他药物
final_result <- df %>%
  filter(drug != "ibuprofen") %>%  # 排除布洛芬本身
  inner_join(ibuprofen_info, by = "id") %>%  # 关联患者的布洛芬服用信息
  filter(start > ibuprofen_start, start < death) %>%  # 时间范围:布洛芬之后,死亡之前
  select(id, drug, start)  # 保留需要的列

# 输出结果
final_result

代码逻辑说明

  • 必须先把start和death转成数值型,否则字符串的大小比较会出错(比如"50"和"100"字符串对比会得到错误结果)
  • 先提取每个患者的布洛芬服用时间,方便后续和其他药物的时间做对比
  • 过滤掉布洛芬本身,只关注其他药物,再通过患者ID关联对应的布洛芬时间和死亡时间
  • 最后筛选出满足时间范围的记录,就是我们需要的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:52:35