如何基于两列日期顺序条件删除R dataframe中的指定行
实现方案
方法1:基础R实现
# 提取每个var1对应的最早检查日期 inspec_min_date <- aggregate(date ~ var1, data = inspec, FUN = min) # 关联test和检查日期 test_merged <- merge(test, inspec_min_date, by = "var1", all.x = TRUE, suffixes = c("", "_inspec")) # 筛选符合要求的行:无对应检查记录 或 日期早于最早检查日期 test_res <- test_merged[is.na(test_merged$date_inspec) | test_merged$date < test_merged$date_inspec, names(test)]
方法2:dplyr实现(代码更简洁)
library(dplyr) # 提取每个var1对应的最早检查日期 inspec_min <- inspec %>% group_by(var1) %>% summarise(inspec_date = min(date)) test_res <- test %>% left_join(inspec_min, by = "var1") %>% # 保留无检查记录 或 日期早于检查日期的行 filter(is.na(inspec_date) | date < inspec_date) %>% select(-inspec_date)
补充说明
- 如果你需要将等于检查日期的行也删除,把上述代码中的判断条件
date < inspec_date改为date <= inspec_date即可 - 如果你的需求是删除晚于
inspec中该var1所有检查日期的行,只需要将聚合函数从min改为max即可
内容的提问来源于stack exchange,提问作者DR15
相关产品推荐
相关产品推荐

