[英]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.