【问题标题】:Finding the number of missing times between two time variables查找两个时间变量之间的缺失次数
【发布时间】:2016-06-22 01:49:41
【问题描述】:

我有两个时间变量,

time1
6/15/16 8:00
6/15/16 9:00
6/15/16 10:00
6/16/16 8:00
6/16/16 9:00
6/17/16 8:00
6/18/16 8:00
6/18/16 8:30
6/18/16 9:10
6/19/16 8:00
6/20/16 8:00
6/20/16 11:00

time2
6/15/16 7:58
6/16/16 8:03
6/16/16 9:01
6/17/16 8:00
6/18/16 8:02
6/19/16 8:00
6/20/16 8:00

我想找到两个时间变量之间最接近的时间。我想为结束时保留一些边界,例如 4 分钟。如果两次之间的时间差小于或等于 4 分钟,我想将两者等同起来,否则我想计算在限制之间有多少值彼此不等同。我的示例输出应该是这样的,

time1              time2     time difference    number of values missed
6/15/16 8:00    6/15/16 7:58       2                         2
6/16/16 8:00    6/16/16 8:03       3                         0
6/16/16 9:00    6/16/16 9:01       1                         0
6/17/16 8:00    6/17/16 8:00       0                         0
6/18/16 8:00    6/18/16 8:02       2                         2
6/19/16 8:00    6/19/16 8:00       0                         0
6/20/16 8:00    6/20/16 8:00       0                         1

其中 time1 和 time2 相等,时间差是两者之间的分钟差,缺失值变量将显示当前行和下一行之间不匹配的值的计数一场比赛。

我发现很难将其放入代码中。任何人都可以给出一些想法来开始这个或任何解决这个问题的方法吗?

谢谢

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您的数据:

    times1 <- structure(c(1466002800, 1466006400, 1466010000, 1466089200, 1466092800, 
    1466175600, 1466262000, 1466263800, 1466266200, 1466348400, 1466434800, 
    1466445600), class = c("POSIXct", "POSIXt"), tzone = "")
    
    times2 <- structure(c(1466002680, 1466089380, 1466092860, 1466175600, 1466262120, 
    1466348400, 1466434800), class = c("POSIXct", "POSIXt"), tzone = "")
    

    这是你想要的吗?

    library(dplyr)
    expand.grid(time1 = times1, time2 = times2) %>%
      mutate(
        diff = abs(difftime(time1, time2, units = "min"))
        ) %>%
      filter(diff <= 4) %>%
      arrange(time1) %>%
      mutate(
        missed = match(time1, times1),
        missed = c(diff(missed) - 1,
                   length(times1) - tail(missed, n=1))
      )
    #                 time1               time2   diff missed
    # 1 2016-06-15 08:00:00 2016-06-15 07:58:00 2 mins      2
    # 2 2016-06-16 08:00:00 2016-06-16 08:03:00 3 mins      0
    # 3 2016-06-16 09:00:00 2016-06-16 09:01:00 1 mins      0
    # 4 2016-06-17 08:00:00 2016-06-17 08:00:00 0 mins      0
    # 5 2016-06-18 08:00:00 2016-06-18 08:02:00 2 mins      2
    # 6 2016-06-19 08:00:00 2016-06-19 08:00:00 0 mins      0
    # 7 2016-06-20 08:00:00 2016-06-20 08:00:00 0 mins      1
    

    【讨论】:

    • 非常感谢!我想当它们都在同一个数据集中时,这很有效。我有两个不同的数据集,都需要按州、地铁、日期分组,然后检查上述情况。很抱歉之前没有具体说明。你能给我一些想法吗?
    • 我不知道您的实际数据是如何构成的:我的解决方案数据与您问题的数据相同。
    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2011-04-19
    • 2014-07-12
    相关资源
    最近更新 更多