在 R 中按天重叠 start/end 日期范围聚合

Overlapping start/end date range aggregation by day in R

我搜索了很多问题,想看看是否能找到答案,但没有一个与我想做的很相符。所以我的数据看起来像这样:

ID  Area  Start       End
1   9     2016-06-30  2016-07-07
2   9     2016-07-01  2016-07-04
3   8     2016-06-21  2016-06-28
4   8     2016-06-23  2016-06-25
5   8     2016-06-25  2016-06-30

我所做的是创建一个数据框,其中包含每个区域的整个日期范围,以及一个空白列来表示总天数。也许有更简单的方法来做到这一点,或者有一个包可以处理这种情况,但我希望能想出这样的东西:

Area  Date        Count
...               0
9     2016-06-30  1
9     2016-07-01  2
9     2016-07-02  2
9     2016-07-03  2
9     2016-07-04  2
9     2016-07-05  1
9     2016-07-06  1
9     2016-07-07  1  
9     2016-07-08  0
...               0
8     2016-06-21  1
8     2016-06-22  1
8     2016-06-23  2
8     2016-06-24  2
8     2016-06-25  3
8     2016-06-26  2
8     2016-06-27  2
8     2016-06-28  2
8     2016-06-29  1
8     2016-06-30  1
...               0

似乎应该有一种简单的方法可以在 R 中处理这样的数组,但我还没有找到它。

提前致谢!

library(data.table)
dt = as.data.table(your_df) # or setDT to convert in-place

# convert dates to Dates (assuming they aren't)
dt[, Start := as.Date(Start, '%Y-%m-%d')]
dt[, End := as.Date(End, '%Y-%m-%d')]

# expand the dates, then aggregate
dt[, .(Date = seq(Start, End, by = 1), Area), by = ID][, .N, by = .(Date, Area)]
#         Date Area N
#1: 2016-06-30    9 1
#2: 2016-07-01    9 2
#3: 2016-07-02    9 2
#4: 2016-07-03    9 2
#...