我搜索过很多问题,看看能不能找到答案,但没有什么比我想做的更合适。所以我的数据看起来像这样:
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中应该有一种简单的方法来处理这样的数组,但我还没有找到它。
提前致谢!
答案 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
#...