R:计算两次之间的行数

时间:2017-06-14 20:08:57

标签: r time-series

我想知道在给定时间(到达和结帐时间之间)有多少人在办公室。我有一个没有NA值的数据框。我想每5分钟计算一次。

  library(timeDate)
    #change from factor to datetime
data$ArrivalDtm<- timeDate(data$ArrivalDtm)
data$CheckoutDtm<- timeDate(data$CheckoutDtm)

然后我创建了5分钟的块:

    #make a df of 5 minute intervals
blocks <- as.data.frame(seq(from= timeDate("2015-12-31 23:00:00"), to=timeDate("2017-06-13 23:00:00"), by='5 mins'))

然后我尝试遍历访问的DF,以计算有多少人已登记但未在阻止时间结账。

for (i in blocks) {
  for (visit in 1:nrow(data)){
      waitingroom <- sum(data$ArrivalDtm[visit] > i & i < data$CheckoutDtm[visit])
  }
}

当我运行循环时,我收到此错误:

  

sum中的错误(data $ ArrivalDtm [visit]):参数的无效'type'(S4)

数据

ArrivalDtm<- c("2016-05-10 20:34:00", "2016-04-13 22:46:00", "2016-12-15 13:18:00", "2016-02-26 18:32:00", "2016-04-25 13:55:00") 
CheckoutDtm <- c("2016-05-10 20:37:00", "2016-04-14 00:23:00", "2016-12-15 13:27:00", "2016-02-26 18:53:00", "2016-04-25 14:33:00")

1 个答案:

答案 0 :(得分:0)

我发现了一种更优雅(有效)的方法: 我创建了10分钟的垃圾箱和使用过的润滑剂来测试访问范围是否与垃圾箱重叠并计算每个垃圾箱的TRUE值。运行需要很长时间 - 可以进行优化。但这是一个开始。

diff <- make_difftime(minutes=10)
as.interval(diff, ymd_hms("2017-01-01 00:00:00"))
intervals <- as.interval(diff, seq(from= ymd_hms("2017-01-01 00:00:00"), to=ymd_hms("2017-06-13 23:00:00"), by='10 mins'))

span <- interval(recentdata$ArrivalDtm, recentdata$CheckoutDtm)


#int_overlaps(intervals,span)


waitingroom <- intervals
waitingroom <- as.data.frame(waitingroom)
waitingroom$count <- 0

for (interval in 1:length(intervals)){
  (waitingroom$count[interval] <- sum(int_overlaps(intervals[interval], span)==TRUE))
}