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
相关产品推荐
相关产品推荐

