2016-04-06 6 views
1

Ich möchte die Gesamtzahl der Personen, die an einem bestimmten Tag anwesend waren, zählen. Sie haben ein Intervall (start.date) und (end.date). Wie kann ich all jene Leute zählen, deren Intervall innerhalb eines bestimmten Datums liegt? Ich dachte über die Verwendung von lubridate und interval(), aber ich bin immer noch fest, wie ich dies für jeden Tag zu wiederholen? Bitte helfen Sie.Summierung innerhalb eines Tages über ein Intervall R

first_date = as.Date(min("2011-01-01")) 
last_date = as.Date(max("2011-12-31")) 
all_dates = seq(first_date, by=1, to=last_date) 

CY_2015 <- data.frame(DATE = all_dates) 

df <- data.frame(ID = c(1,2,3,4), 
       START.DATE = as.Date(c("2011-07-24", "2011-07-19", "2011-07-08", "2011-07-23")), 
       END.DATE = as.Date(c("2011-07-26", "2011-07-21", "2011-07-10", "2011-07-25"))) 

# I tried something like this to no avail: 

for (i in 1:365) { 
    DATE <- CY_2015$DATE[i] 
    df <- df %>% mutate(new_var = in.interval.lo(DATE, START.DATE, END.DATE)) 
    names(df)[length(df)] <- paste0(DATE) 
    } 
+0

[Roll Join mit Start/Ende-Fenster] (http://StackOverflow.com/Questions/24480031) – zx8754

Antwort

0

Dies sollte es tun. Ich habe mich angewendete, um alle Tage und den "which" -Befehl auf dem Datenrahmen zu durchlaufen, um die Zählungen pro Tag zu bestimmen.

#number of people present per day 
countperday<-sapply(all_dates, function(x) {length(which(df$START.DATE<=x &df$END.DATE>=x))}) 
#results<-data.frame(counts=countperday, date=all_dates) 
    #only the days where someone was present 
days<-all_dates[countperday>0] 
    #reduced results 
results<-data.frame(counts=countperday[countperday>0], date=days) 

Vielleicht nicht ein optimaler Ansatz, aber sollte Ihre Frage beantworten.

Verwandte Themen