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

R语言:按ID筛选关联药物最早日期并保留指定行

解决方案

首先确保date列是日期格式(如果原始数据中date是字符类型),再通过分组计算+条件筛选实现需求:

library(dplyr)

# 转换日期格式(若原始date为字符类型)
df$date <- as.Date(df$date)

df_final <- df %>%
  group_by(id) %>%
  # 计算每个id下related_medication为"yes"的最早日期
  mutate(min_yes_date = min(date[related_medication == "yes"], na.rm = TRUE)) %>%
  # 筛选目标行:要么是no的记录,要么是yes且日期匹配该id最早yes日期的记录
  filter(related_medication == "no" | (related_medication == "yes" & date == min_yes_date)) %>%
  # 移除临时辅助列
  select(-min_yes_date) %>%
  ungroup()

代码说明

  • group_by(id):按id分组处理每个用户的数据集
  • mutate(min_yes_date = ...):针对每个分组,提取related_medication为"yes"的行的日期,计算其中的最小值,作为该分组的基准日期
  • filter(...):精准保留两类记录:所有related_medication为"no"的行,以及related_medication为"yes"且日期等于该分组最早yes日期的行
  • select(-min_yes_date):删除临时计算的辅助列,还原结果结构

运行后得到的结果与期望一致:

# A tibble: 4 × 4
     id date       medication related_medication
                           
1     1 2017-02-07 D          yes               
2     2 2017-02-18 S          yes               
3     2 2017-02-18 F          no                
4     3 2017-02-01 F          yes               

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:56:41