代码之家  ›  专栏  ›  技术社区  ›  Joe

如何计算多个日期是否在一个日期范围内

r
  •  1
  • Joe  · 技术社区  · 2 年前

    我有一个开始和结束日期的列表,我想弄清楚其中哪一个属于我的日期(在这种情况下,这只是最后3个日期/天)。如果开始日期和结束日期之间的任何日期都在过去3天内,那么我想保留这些

     myDates = c(20240320, 20240319, 20240318)
    
    datesToSearch
    itemNo             start    end
    241             20240311 20240317
    242             20240316 20240317
    243             20240319 20240321
    244             20240318 20240324
    300             20240318 20240324
    

    在这里,我只想返回一个df,其中包含与我所查找的数据相匹配的数据,在这种情况下

    correctdatesToSearch
    itemNo             start    end
    243             20240319 20240321
    244             20240318 20240324
    300             20240318 20240324
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   Allan Cameron    2 年前

    如果将日期转换为实际的日期对象,而不是使用整数来表示日期,则会容易得多。您正在使用的格式可以使用轻松转换 lubridate::ymd 。我们可以即时执行此操作,也可以使用 lubridate 功能 interval %within% 要找出哪些行在开始日期和结束日期之间包含一个或多个日期,请过滤出结果:

    library(lubridate)
    
    df[ymd(myDates) |>
        sapply(\(x) x %within% interval(ymd(df$start), ymd(df$end))) |>
        apply(1, any),] 
    #>   itemNo    start      end
    #> 3    243 20240319 20240321
    #> 4    244 20240318 20240324
    #> 5    300 20240318 20240324