我有一個包含項目的數據框,並且每個項目都有開始日期和結束日期。我想知道一段時間內每天有多少活動項目。如何計算R中開始日期結束日期間隔的記錄?
示例數據集中:
ItemId <- c(1,2,3)
StartDate <- c(ymd("2014-01-01"),ymd("2014-02-01"),ymd("2014-03-01"))
EndDate <- c(ymd("2014-02-15"),ymd("2014-02-07"),ymd("2014-03-03"))
data.frame(ItemId,StartDate,EndDate)
ItemId StartDate EndDate
1 1 2014-01-01 01:00:00 2014-02-15 01:00:00
2 2 2014-02-01 01:00:00 2014-02-07 01:00:00
3 3 2014-03-01 01:00:00 2014-03-03 01:00:00
結果應該是這個樣子(每天一個條目):
Date ActiveCount
2014-01-01 1
2014-01-02 1
...
2014-02-01 2
...
我使用sqldf有一個解決方案,但不知道該怎麼辦這在R.
select d.date
, (select count(ItemID)
from items
where startdate <= d.date
and enddate >= d.date
) activecount
from (select distinct startdate from items
union
select distinct enddate from items
) d
order by 1
(我每天都會有多個條目,所以對於R中的sqlite這個工作。 ostgresql我可以生成一系列更好的日期。)
謝謝。
查看'data.table'包中的'foverlaps()'。或者在SO上搜索它。 – Arun
請注意,sql語句可以使用'where d.date在startdate和enddate'之間。 –