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

R语言如何筛选3天内数值从0变为-5的数据框子集?

R数据框3天间隔条件筛选实现

核心需求

筛选数据框中3天及以内数值从0变化到-5的所有关联记录,排除间隔超过3天的序列段。

完整实现代码

library(lubridate)
library(dplyr)

# 加载测试数据
data <- data.frame(date = c("2020-06-08",
                            "2020-06-09",
                            "2020-06-10",
                            "2020-06-11",
                            "2020-06-12",
                            "2021-06-13",    
                            "2021-06-14",
                            "2021-06-15",
                            "2021-06-16",
                            "2021-06-17",
                            "2021-06-18",
                            "2021-06-19",
                            "2021-06-20"),
                   value = c(2,0,-7,1,0,-1,-2,-3,-4,0,-6,-5,10))
data$date <- as.Date(data$date)

# 第一步:提取两类关键节点的日期
zero_dates <- data$date[data$value == 0]
neg5_dates <- data$date[data$value == -5]

# 第二步:筛选符合时间间隔要求的有效区间
valid_ranges <- expand.grid(start = zero_dates, end = neg5_dates) %>%
  mutate(day_gap = as.numeric(difftime(end, start, units = "days"))) %>%
  filter(day_gap >= 0, day_gap <= 3) # 0在-5之前,间隔不超过3天

# 第三步:提取所有落在有效区间内的记录
result <- data %>%
  rowwise() %>%
  filter(any(date >= valid_ranges$start & date <= valid_ranges$end)) %>%
  ungroup()

逻辑说明

  • 不需要在filter里写复杂的滚动判断,先把所有符合时间要求的0值到-5值的时间区间找出来,再匹配对应行即可
  • 逻辑可灵活调整:如果要改间隔天数、改起止判断值,直接修改对应参数就行
  • 运行后得到的结果会自动保留从0到-5之间的所有中间记录,自动剔除间隔超3天的无效序列(比如示例中0之后连续走了7天才到-5的那段会被排除)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:57:19