2017-06-14 92 views
0

我試圖弄清楚在給定時間(抵達和結帳時間之間)有多少人在辦公室。我有一個沒有NA值的數據幀。我想計算每5分鐘的音量。R:計算兩次之間的行數

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]) 
    } 
} 

當我運行的循環我得到這個錯誤:

Error in sum(data$ArrivalDtm[visit]) : invalid 'type' (S4) of argument

數據

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") 
+0

您能否提供一些樣本數據以幫助那些可能試圖回答的人? – BLT

+0

您有權利,而不是最好的方法,但需要查看一些示例數據來調試錯誤。 – Masoud

+0

以下是一些示例數據。 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「) – mzee

回答

0

我發現了一個更優雅的(合法的)的方式來做到這一點: 我創建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)) 
}