【问题标题】:lubridate date-time interval behavior - finding single dates within intervals润滑日期时间间隔行为 - 在间隔内查找单个日期
【发布时间】:2017-09-04 02:33:37
【问题描述】:

运行一些测试以找出如何使用interval 的lubridate 库类来解决问题。

是否有一种简单的方法来检查单个日期/时间是否在给定的时间间隔内?到目前为止,我想出的只是将单个日期转换为一个间隔,其中单个日期重复作为开始和结束时间,然后像这样测试它。只是想知道是否有更好的方法:

library(lubridate)
intTest <- mdy_hms("5/20/2017 2:28:57", 
     tz = "America/New_York") %--% mdy_hms("5/20/2017 2:28:59", 
     tz = "America/New_York")

int_overlaps(interval(mdy_hms("5/20/2017 2:28:58", 
 tz = "America/New_York"), mdy_hms("5/20/2017 2:28:58")), intTest)

也尝试使用%within%,但这也不适用于这种情况(除非我以某种方式错误地使用它)。尝试了此处给出的测试示例,但即使答案是TRUE,它也会返回FALSE:

interval(mdy_hms("5/20/2017 2:28:58"), mdy_hms("5/20/2017 2:28:58"))  
         %within% intTest

【问题讨论】:

    标签: r date lubridate


    【解决方案1】:

    我觉得只是

    mdy_hms("5/20/2017 2:28:58", tz = "America/New_York") %within% intTest
    #[1] TRUE
    

    这在?"%within%"帮助页面上进行了讨论,显示a %within% b在哪里

    "a: 间隔或日期时间对象"

    确保在进行比较时也匹配您的时区。

    intTest
    #[1] 2017-05-20 02:28:57 EDT--2017-05-20 02:28:59 EDT
    
    myint <- interval(
      mdy_hms("5/20/2017 2:28:58", tz="America/New_York"),
      mdy_hms("5/20/2017 2:28:58", tz="America/New_York")
    )
    
    myint
    #[1] 2017-05-20 02:28:58 EDT--2017-05-20 02:28:58 EDT
    
    myint %within% intTest
    #[1] TRUE
    
    myintUTC <- interval(
      mdy_hms("5/20/2017 2:28:58"),
      mdy_hms("5/20/2017 2:28:58")
    )
    
    myintUTC
    #[1] 2017-05-20 02:28:58 UTC--2017-05-20 02:28:58 UTC
    
    myintUTC %within% intTest
    #[1] FALSE
    

    【讨论】:

    • 我的问题的原因是它在将日期输入%within% 时需要格式字符串。 RStudio 上的帮助实际上说“a 是间隔,b 是间隔”,所以现在我知道帮助页面可能比我的 R 环境中的内容更新。
    • 感谢您的回答。有一个奇怪的难以复制的问题,即使用此技术创建的数据框的列,如果我总结以获取它们的 max() 和 min() 值,然后尝试从 df 的另一列中的 max 中减去 min,结果显示使用正确的数字,但它应该是秒时显示分钟。在对 df 列(使用 mdy_hms() 创建的)执行操作时,我需要格式化它吗?我找不到一个例子,它不仅仅表明我应该能够像这样采用 max()、min() 并减去它们:max(date_col) - min(date_col)`。
    • @TMWP - 可能是 difftime(max(x), min(x), units="secs") - 你可以为 ?difftime 操作指定你想要的单位
    • 非常感谢。对于这里的读者:奇怪的是我的数据框的日期列的值相差分钟或秒。出于某种原因,如果没有“秒”格式,我的 6 秒答案显示为“6.0000 分钟”。不幸的是,这个修复意味着一些相隔 15 分钟以上的答案现在显示为 991 秒,这很难阅读,但只要答案是正确的,这仍然是一个改进。这种行为很奇怪,但建议的解决方法有效。
    猜你喜欢
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2019-05-13
    • 2012-03-26
    相关资源
    最近更新 更多