繁体   English   中英

R:计算两次之间的行数

[英]R: Count how many rows between two times

我试图弄清楚在给定时间(到达和退房时间之间)办公室里有多少人。 我有一个没有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])中的错误:参数的“类型”(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")

我发现了一种更优雅(有效)的方法:创建了10分钟的垃圾箱,并使用lubridate测试访问范围是否与垃圾箱重叠,并计算每个垃圾箱有多少个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))
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM