从 start/end 日期转换为每个时间段的累积事件

Convert from start/end date to cumulate events per time period

最终目标是可视化大量个体每天服用的药物量。我正在尝试重塑我的数据以制作堆积面积图(或类似的东西)。

更笼统地说;我的数据结构如下:

id med     start_date  end_date
1  drug_a  2010-08-24  2011-03-03
2  drug_a  2011-06-07  2011-08-12
3  drug_b  2010-03-26  2010-10-31
4  drug_b  2012-08-14  2013-01-31
5  drug_c  2012-03-01  2012-06-20
5  drug_a  2012-04-01  2012-06-14

我想我正在尝试创建一个数据框,每个日期一行,一列汇总当天服用该药物的患者总数 (id)。例如,如果有人服用 drug_a2010-01-012010-01-20,每个药物日都应该算在内。

类似于:

date       drug_a   drug_b   drug_c
2010-01-01      5        0       10
2010-01-02     10        2        8

我可以使用 dplyr 和 tidyr,但不确定如何使用带有日期和持续时间的 spread。

我会使用 do 循环扩展数据以使用所有日期:

library(dplyr)
library(tidyr)
library(zoo)

df %>%
  group_by(id, med) %>%
  do(with(.,
          data_frame(
            date = (start_date:end_date) %>% as.Date) ) ) %>%
  group_by(date, med) %>%
  summarize(frequency = n() ) %>%
  spread(med, frequency)