Skip to content

Instantly share code, notes, and snippets.

@timvink
Created October 30, 2013 09:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timvink/7229796 to your computer and use it in GitHub Desktop.
Save timvink/7229796 to your computer and use it in GitHub Desktop.
Functie om de bezetting te bepalen, gegeven een begintijd en eindtijd.
BepaalBezetting <- function(DT_bezetting=kliniek) {
vecTime <- seq.POSIXt(min(DT_bezetting$Ingangsdatumtijd)-60, max(DT_bezetting$Einddatumtijd)+60, by = "mins")
Start <- setkey(DT_bezetting, Ingangsdatumtijd)
Start <- Start[J(vecTime),.N] # Per minuut, het aantal gestarte mutaties.
setnames(Start,"N","Start") # kolomnaam anders
setnames(Start,"Ingangsdatumtijd","Minuut") # kolomnaam anders
Eind <- setkey(DT_bezetting, Einddatumtijd)
Eind <- Eind[J(vecTime),.N] # Per minuut, het aantal gestarte mutaties.
setnames(Eind,"N","Eind") # kolomnaam anders
setnames(Eind,"Einddatumtijd","Minuut") # kolomnaam anders
Bezetting <- merge(Start,Eind, by=c("Minuut"))
Bezetting <- Bezetting[,Bezetting:=cumsum(Start - Eind)] # Bezetting uitrekenen
Bezetting <- Bezetting[Minuut >= as.POSIXct("2012-01-01 00:00:00", tz="GMT") & Minuut <= as.POSIXct("2013-01-01 00:00:00", tz="GMT"),]
Bezetting$Maand <- strftime(Bezetting$Minuut, format="%m", tz="GMT")
Bezetting$DagVdWeek <- strftime(Bezetting$Minuut, format="%A", tz="GMT")
Bezetting$DagVdWeek <- ordered(Bezetting$DagVdWeek, levels=c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"))
Bezetting$UurVdDag <- as.numeric(strftime(Bezetting$Minuut, format="%H", tz="GMT"))
rm(list=c("Start","Eind","vecTime"))
return(Bezetting)
}
@bjakker
Copy link

bjakker commented Nov 3, 2013

Het werkt prima.
Selecties op de data worden gemaakt door vooraf te filteren op kliniek: kliniek[kliniek$Vlek == Vlek,]
Kan dit ook door een parameter toe te voegen aan Start <- Start[J(vecTime),.N]?
Dan meerdere Start en Eind aan te maken (Bv Start-DV en Start OPN) dan deze te mergen en daarna de bezetting uit te rekenen voor elke start en eind?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment