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

R语言如何筛选匹配多个drug_name的分组及计算med_start间隔

实现方案(基于dplyr)

需求1:筛选同时包含多种指定药物/药物种类达标的id

  • 你的思路是可行的,完全可以先按id分组再做条件过滤,同时支持2种及以上药物的筛选场景,代码示例如下:
library(dplyr)
# 场景1:指定需要同时包含的药物列表
target_drugs <- c("pembrolizumab", "nivolumab")
res1 <- data %>%
  group_by(id) %>%
  filter(all(target_drugs %in% drug_name)) %>% # 确保组内包含所有目标药物
  ungroup()

# 场景2:不指定具体药物,只要不同药物数量≥N即可(例:N=2)
res1_ext <- data %>%
  group_by(id) %>%
  filter(n_distinct(drug_name) >= 2) %>%
  ungroup()

运行上述代码,样例数据中符合条件的id=2的所有记录都会被保留。


需求2:筛选存在用药日期间隔大于x天的id

  • 核心逻辑是分组后计算同id下的最大日期间隔,只要最大间隔大于x,就必然存在至少两条记录满足间隔要求,示例代码如下(x取30天为例):
x <- 30
res2 <- data %>%
  group_by(id) %>%
  filter(max(med_start) - min(med_start) > x) %>%
  ungroup()
  • 如果你的需求是相邻两次用药的间隔大于x天,可以用排序加偏移函数的写法:
x <- 30
res2_adjacent <- data %>%
  group_by(id) %>%
  arrange(med_start) %>% # 按用药日期升序排列
  filter(any(med_start - lag(med_start) > x, na.rm = T)) %>%
  ungroup()

样例数据中id=2的最早用药日期为2018-01-05,最晚为2018-11-01,间隔远大于30天,会被筛选出来;id=1的两次用药间隔为21天,不符合要求会被过滤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:18:05