2012-06-13 4 views
4

이벤트에 등록한 사람의 수와 함께 시작 날짜와 종료 날짜가있는 데이터 프레임이 있습니다. 나는 (예를 들어, 7시에서 17시까지) 각 당사자가 특정 기간 내에을 위해 존재하는 시간의 수를 계산하고 싶은두 날짜 사이의 일일 "영업 시간"계산

나는 다음과 같은 예를 들어 data.frame을 사용하는 경우 ...

d <- data.frame(startDate = c(as.POSIXct("2011-06-04 08:00:00"), as.POSIXct("2011-06-03 08:00:00"), 
          as.POSIXct("2011-09-12 10:00:00")), 
      endDate = c(as.POSIXct("2011-06-06 11:00:00"), as.POSIXct("2011-06-04 11:00:00"), 
         as.POSIXct("2011-09-12 18:00:00")), 
      partysize = c(124,442,323)) 
open <- "07:00" 
close <- "17:00" 

day      numhours partysize 
2011-06-04      9  124 
2011-06-05     10  124 
2011-06-06      4  124 
2011-06-03      9  442 
2011-06-04      4  442 
2011-09-12      7  323 

참고 :

나는 이런 식으로 뭔가를하도록 설정하고 내 결과를하고 싶은 날짜가 개폐 시간 사이에 포함 된 시간의 수는 NUMHOURS입니다

사전에 617,451,515,

감사합니다, 죄송합니다 --JT

답변

3

매우 지저분한 내가 7, 대신 개방의 17

app.days<-mapply(function(x,y){x+y*60*60*24},as.POSIXct(format(d$startDate,"%Y-%m-%d")),lapply(floor(-(d$startDate-d$endDate)/24),seq,from=0)) 
start.date<-mapply(function(x,y){pmax(x+7*60*60,y)},app.days,d$startDate) 
end.date<-mapply(function(x,y){pmin(x+17*60*60,y)},app.days,d$endDate) 
app.hours<-mapply(function(x,y){as.numeric(x-y)},end.date,start.date) 
res<-mapply(function(x,y,z){data.frame(day=as.Date(x),numhours=y,partysize=z)},app.days,app.hours,as.list(d$partysize)) 
res1<-data.frame(day=as.Date(unlist(res[1,]),origin="1970-01-01"),numhours=unlist(res[2,]),partysize=unlist(res[3,])) 

> res1 
     day numhours partysize 
1 2011-06-04  9  124 
2 2011-06-05  10  124 
3 2011-06-06  4  124 
4 2011-06-03  9  442 
5 2011-06-04  4  442 
6 2011-09-12  7  323 

기본적으로 우리는 각 당사자의 크기가 유지 얼마나 많은 일 확인 가까운

을 사용했다. 주어진 하루 동안 우리는 적절한 개폐를 찾습니다. 그런 다음 닫기에서 열기를 뺍니다. 결국 데이터 프레임이 형성되었지만 아마도 < - 단계에서 생성되었을 수 있습니다 .....

+0

예, 추한 ...하지만 작동합니다 :) 감사합니다! – JimmyT

+1

나는 오늘 이걸 가지고 놀았고, 난독성을 위해 만든 유일한 수정은 시퀀스를 사용하여 app.days app.days를 작성하는 것이 었습니다. <- mapply (function (x, y) {seq (x, y, by = "day")} (형식 (d $ endDate, "% Y- % m- % d"))), as.POSIXct (형식 (d $ startDate, "% Y- % m- % d")) ) – JimmyT

관련 문제