R

时间:2016-07-20 15:59:59

标签: r aggregation date-range

我搜索过很多问题,看看能不能找到答案,但没有什么比我想做的更合适。所以我的数据看起来像这样:

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中应该有一种简单的方法来处理这样的数组,但我还没有找到它。

提前致谢!

1 个答案:

答案 0 :(得分:2)

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
#...