2016-11-28 177 views
1

中存在的伯爵人無我有一個包含個人DF的到來&出發日期和逗留(LOS)的總長度:指定日期範圍

arrive <- as.Date(c("2016/08/01","2016/08/03","2016/08/03","2016/08/04")) 
    depart <- as.Date(c("2016/08/02","2016/08/07","2016/08/04", "2016/08/06")) 
    people <- data.frame(arrive, depart) 
    people$los <- people$depart - people$arrive 
    View(people) 

...和含有開始&結束日期另一種DF。

start <-seq(from=as.Date("2016/08/01"), to=as.Date("2016/08/08"), by="days") 
    end <-seq(from=as.Date("2016/08/01"), to=as.Date("2016/08/08"), by="days") 
    range <- data.frame(start, end) 
    View(range) 

如何添加列範圍$人口普查來統計每天有多少人?在我的例子中,值我正在尋找將如下所示:

range$census <- c(1,1,2,3,2,2,1,0) 

我什麼不知道的是如何從一個值上應用的計算DF到不同長度的另一DF。以下是我試過到目前爲止:

people$count <- 1 
    range$census <- sum(people$count[people$arrival <= range$start & people$depart >= range$end]) 

注:例如開始以上/結束日期是同一天,但我也需要看大的範圍,其中開始/結束日期將是相隔一個月或一年。

+1

http://stackoverflow.com/q/40831059/4497050 – alistaire

+0

我是新來的SO,但這個問題沒有答案,也沒有重複的例子,所以我沒我不認爲我的工作重複。最好的做法是等待這個問題得到答覆?編輯它以包含一個可重複的例子?要麼...?謝謝! – jesstme

+0

使用'data.table'的非等聯接應該在這裏工作得很好。 – Gregor

回答

1

爲什麼你需要在範圍內的「結束」列?

這將與工作

range$count <- rep(0, nrow(range)) 
sapply(seq(nrow(people)), function(x) 
     { 
     range$count <<- range$count + range$start %in% 
         seq(people[x, "arrive"], people[x, "depart"], by = "day") 
     }) 
+0

我需要範圍內的「結束」列,因爲我偶爾需要查看更大的時間範圍,其中start < - as.Date(c(「2016/08/01」,「2016/09/01」,「2016/10/01「))並結束< - as.Date(c(」2016/08/31「,」2016/09/30「,」2016/10/31「))。我必須稍微調整一下代碼,但我已經接受了您的答案,因爲它對我當前的例子非常有用 - 謝謝! – jesstme