从 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_a
从 2010-01-01
到 2010-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)
最终目标是可视化大量个体每天服用的药物量。我正在尝试重塑我的数据以制作堆积面积图(或类似的东西)。
更笼统地说;我的数据结构如下:
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-01
到 2010-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)