如何按日期筛选但保留不在该时段内的同组重复数据?
实现目标数据筛选的方法
当然可以实现这个需求,核心思路是先找出至少有一条记录落在目标日期区间的分组,再保留这些分组的所有记录。以下是两种常用的R语言实现方式:
方法一:Base R 实现
先将日期列转换为日期格式,再筛选出符合条件的分组,最后提取这些分组的全部记录:
# 转换date1为日期格式 data$date1 <- as.Date(data$date1) # 找出至少有一条记录在目标日期区间的分组 target_groups <- unique(data$group[data$date1 >= as.Date("2021-08-01") & data$date1 <= as.Date("2021-08-31")]) # 保留目标分组的所有记录 filtered_data <- data[data$group %in% target_groups, ]
方法二:dplyr 包实现
借助dplyr的分组和条件筛选功能,代码更简洁直观:
library(dplyr) filtered_data <- data %>% # 转换日期格式 mutate(date1 = as.Date(date1)) %>% # 按group分组 group_by(group) %>% # 筛选出组内至少有一条记录在目标区间的分组 filter(any(date1 >= as.Date("2021-08-01") & date1 <= as.Date("2021-08-31"))) %>% # 取消分组 ungroup()
运行上述代码后,filtered_data会保留所有符合要求的记录:比如group为"09081997"的全部3条记录(哪怕其中一条日期在7月),以及group为"13122006"的记录;而group为"22031969"的记录会被排除,因为该组没有任何记录落在目标日期区间内。
内容的提问来源于stack exchange,提问作者Lana Meijinhos
相关产品推荐
相关产品推荐

