从开始/结束日期转换为每个时间段累积事件

时间:2015-10-06 01:05:17

标签: r dplyr reshape tidyr

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

更通用的术语;我的数据结构如下:

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_a开始2010-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功能,但不确定如何使用日期和持续时间的传播。

1 个答案:

答案 0 :(得分:1)

我会使用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)