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

R语言如何排除同一类别中与上一保留观测间隔不足80天的日期

实现思路与代码

你之前用相邻行差值计算的方法不符合需求,核心原因是差值计算的基准是上一条全部行的日期,而你需要的基准是上一条被保留的行的日期,必须逐行迭代动态更新判断基准才能实现需求。

以下是tidyverse生态的最简实现方案:

# 加载依赖包
library(tidyverse)
library(lubridate)

# 数据处理
df_result <- df %>%
  # 先将日期列转为标准日期格式,根据你的实际日期格式调整转换函数
  mutate(Date = ymd(Date)) %>%
  # 同类别同日期重复记录可先去重,无重复可删除此行
  distinct(category, Date, .keep_all = TRUE) %>%
  # 按类别、日期升序排列
  arrange(category, Date) %>%
  group_by(category) %>%
  mutate(
    # 动态累积记录上一个被保留的观测日期
    last_keep_date = accumulate(Date, function(prev_keep, curr) {
      if (curr - prev_keep >= days(80)) curr else prev_keep
    }),
    # 匹配到基准更新的行即为符合保留规则的记录
    keep = Date == last_keep_date
  ) %>%
  # 筛选保留行并删除辅助列
  filter(keep) %>%
  select(-last_keep_date, -keep)

效果验证

拿你提供的示例数据测试,处理后会保留编号为1、3、4、6、7、9的观测,完全符合你要求的规则。针对补充1的场景,2015-10-03与上一个保留的2015-06-29间隔96天,会被正常判定为保留行,不会被误删。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:36:03