r - 检查 Posixct 时间是否在区间内

标签 r count intervals lubridate

问题:
我有两个数据帧,我想根据一个数据帧的日期/时间在另一个数据帧的间隔内进行合并。

交通:日期和时间(Posixct),频率

mydata:间隔,频率总和

我现在想计算交通的 Posixct 时间是否在 mydata 的间隔内,如果这是真的,我想计算 mydata 中“频率总和”列中的频率。

我遇到的两个问题:
1.交通数据框的行数明显多于mydata。我不知道如何告诉 R 遍历流量中的每个观察以检查 mydata 中的一行。

  • mydata 的频率区间可以有多个观测拟合。我希望 R 将不同交通观察的所有频率相加,以获得频率的总分。间隔也是重叠的。

  • 这是数据:
    DateTime <- c("2014-11-01 04:00:00", "2014-11-01 04:03:00",  "2014-11-01 04:06:00", "2014-11-01 04:08:00", "2014-11-01 04:10:00", "2014-11-01 04:12:00", "2015-08-01 04:13:00", "2015-08-01 04:45:00", "2015-08-01 14:15:00", "2015-08-01 14:13:00")
    DateTime <- as.POSIXct(DateTime)
    Frequency <- c(1,2,3,5,12,1,2,2,1,1)                 
    traffic <- data.frame(DateTime, Frequency)
    
    library(lubridate)
    DateTime1 <- c("2014-11-01 04:00:00", "2015-08-01 04:03:00",  "2015-08-01 14:00:00")
    DateTime2 <- c("2014-11-01 04:15:00", "2015-08-01 04:13:00",  "2015-08-01 14:15:00")
    DateTime1 <- as.POSIXct(DateTime1)
    DateTime2 <- as.POSIXct(DateTime2)
    mydata <- data.frame(DateTime1, DateTime2)
    mydata$Interval <- as.interval(DateTime1, DateTime2)
    mydata$SumFrequency <- NA
    

    预期的结果应该是这样的:
    mydata$SumFrequency <- c(24, 2, 2)
    head(mydata)
    

    我尝试了 lubridate 包中的 int_overlaps。
    非常感谢有关如何解决此问题的任何提示!

    最佳答案

    使用 data.table 包中的 foverlaps 的简短解决方案:

    mydata <- data.table(DateTime1, DateTime2, key = c("DateTime1", "DateTime2"))
    traffic <- data.table(start = DateTime, end = DateTime, Frequency, key = c("start","end"))
    
    foverlaps(traffic, mydata, type="within", nomatch=0L)[, .(sumFreq = sum(Frequency)), 
                                                          by = .(DateTime1, DateTime2)]
    

    这使:
                 DateTime1           DateTime2 sumFreq
    1: 2014-11-01 04:00:00 2014-11-01 04:15:00      24
    2: 2015-08-01 04:03:00 2015-08-01 04:13:00       2
    3: 2015-08-01 14:00:00 2015-08-01 14:15:00       2
    

    关于r - 检查 Posixct 时间是否在区间内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35790988/

    相关文章:

    php - 单击元素时如何更新表格行+1?

    mysql - 如何结合 Date_format 和 Date_sub

    r - Shiny 的表格格式

    r - 如何删除匹配条件的行和与其相邻的行

    tsql - 过滤连接表中计数为 X 或至少为 X 或最多为 X 的 ID 的最佳 T-SQL 语法是什么?

    JavaScript - 每 n 秒做一些事情

    java - 在 Windows 7 64 位上安装 JGR(R 的 GUI)

    r - 当我安装 ggplot2 的开发版本时会发生什么

    python - 在 Python 中聚合简单字典的最佳方法