在 R 中,我需要找出哪些治療同時發生并計算出當天的劑量。我需要由病人來做這件事,所以大概是在dplyr.
| 用戶身份 | 治療 | 劑量 | 治療開始 | 治療結束 |
|---|---|---|---|---|
| 1 | 1 | 3 | 2019 年 1 月 28 日 | 2019 年 7 月 30 日 |
| 1 | 1 | 2 | 2019 年 5 月 26 日 | 2019 年 11 月 25 日 |
| 1 | 2 | 1 | 2019 年 8 月 13 日 | 2020 年 2 月 12 日 |
| 1 | 1 | 2 | 2019 年 12 月 6 日 | 2020 年 4 月 7 日 |
| 1 | 2 | 1 | 2019 年 12 月 9 日 | 2020 年 6 月 10 日 |
理想情況下,它的最終形式是用戶 ID、他們正在接受的治療、所有治療的劑量總和以及他們接受所有這些治療的日期。我制作了一個示例結果表,下面有幾行。
| 用戶身份 | 治療 | 總劑量 | 治療開始 | 治療結束 |
|---|---|---|---|---|
| 1 | 1 | 3 | 2019 年 1 月 28 日 | 2019 年 5 月 25 日 |
| 1 | 1 | 5 | 2019 年 5 月 26 日 | 2019 年 7 月 30 日 |
| 1 | 1 | 2 | 2019 年 7 月 31 日 | 2019 年 8 月 12 日 |
| 1 | 1,2 | 3 | 2019 年 8 月 13 日 | 2019 年 11 月 25 日 |
我想出了如何找出一個事件是否與其他事件重疊,但它沒有得到結果日期,也沒有總結劑量,所以我不知道它是否可用。在這種情況下,課程是治療和劑量列的組合。
DF %>% group_by(user_id ) %>%
mutate(overlap = purrr::map2_chr(treatment_start, treatment_end,
~toString(course[.x >= treatment_start & .x < treatment_end| .y > treatment_start & .y < treatment_end]))) %>%
ungroup()
uj5u.com熱心網友回復:
這是個有趣的問題。一種方法是將資料框擴展為每天一行,然后按日期匯總資料:
library(tidyverse)
library(lubridate)
dat %>%
# Convert dates to date format
mutate(across(treatment_start:treatment_end, ~ mdy(.x))) %>%
# Expand the dataframe
group_by(user_id, treatment_start, treatment_end) %>%
mutate(date = list(seq(treatment_start, treatment_end, by = "day"))) %>%
unnest(date) %>%
# Summarise by day
group_by(user_id, date) %>%
summarise(dosage = sum(dosage),
treatment = toString(unique(treatment))) %>%
# Summarise by different dosage (and create periods)
group_by(user_id, treatment, dosage) %>%
summarise(treatment_start = min(date),
treatment_ends = max(date)) %>%
arrange(treatment_start)
輸出:
user_id treatment dosage treatment_start treatment_ends
<int> <chr> <int> <date> <date>
1 1 1 3 2019-01-28 2019-05-25
2 1 1 5 2019-05-26 2019-07-30
3 1 1 2 2019-07-31 2019-08-12
4 1 1, 2 3 2019-08-13 2020-04-07
5 1 2 1 2019-11-26 2020-06-10
6 1 2, 1 3 2019-12-06 2019-12-08
7 1 2, 1 4 2019-12-09 2020-02-12
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/432268.html
