我对 R 还很陌生。
我有一个数据库,其中包含每位患者的唯一标识符 (IPP)、每次住院的标识符 (NDA) 以及每次住院的进入和退出日期。
我需要确定多次住院(同一 IPP 的多次 NDA)的患者在上次住院后 72 小时内再次住院。
问题:我每个独特的住院 (NDA) 都有一条线路,而不是每个独特的患者 (IPP),而且我不确定如何最好地继续获得所需的结果。
我的数据库是这样的,有4列:
IPP <- c("123456", "456789", "789632","123456", "456789")
NDA <- c("147","211","789","258","456")
entry <- c("01/01/2024", "14/07/2024", "06/06/2024", "08/04/2024", "16/07/2024")
exit <- c("24/02/2024", "15/07/2024", "08/09/2024", "10/04/2024", "20/07/2024")
df <- data.frame(IPP, NDA, entry, exit)
print(df)
我尝试使用pivot_wider 将患者的所有住院信息(他的NDA 放在IPP 的一行上)。我在一行中获取了所有患者的住院数据,但入境、出境和 NDA 的日期位于其他行之后。我正在考虑接下来使用 lubridate,但我不确定这是最好的方法以及如何管理多个日期。
BD<- df %>%
group_by(df$IPP) %>%
mutate(id = 1:n()) %>%
ungroup() %>%
pivot_wider(values_from = c(entry, exit, NDA),
names_from = id,
names_prefix = 'id_')`
我想要什么: IPP NDA1 进入 1 退出 1 NDA2 进入 2 退出 2 return72h 1 123456 147 01/01/2024 24/02/2024 无 2 456789 211 14/07/2024 15/07/2024 456 16/07/2024 20/07/2024 是 3 789632 789 06/06/2024 08/09/2024 无 4 123456 258 08/04/2024 10/04/2024 否
或者保留 df 的初始结构并添加一个标签,给出两次停留之间的时间,如果可能,还提供相应数据帧行的数量。这个解决方案可能更聪明。
非常感谢您的帮助!
使用 {dplyr} 中的
lag()
函数查找上一条记录:
IPP <- c("123456", "456789", "789632","123456", "456789")
NDA <- c("147","211","789","258","456")
entry <- c("01/01/2024", "14/07/2024", "06/06/2024", "08/04/2024", "16/07/2024")
exit <- c("24/02/2024", "15/07/2024", "08/09/2024", "10/04/2024", "20/07/2024")
df <- data.frame(IPP, NDA, entry, exit)
首先按患者摸索(IPP)并计算进入和上次退出之间的差异:
df |>
dplyr::group_by(IPP) |>
dplyr::mutate(diff = as.Date(entry, "%d/%m/%Y") - as.Date(dplyr::lag(exit, n=1), "%d/%m/%Y"))
#> # A tibble: 5 × 5
#> # Groups: IPP [3]
#> IPP NDA entry exit diff
#> <chr> <chr> <chr> <chr> <drtn>
#> 1 123456 147 01/01/2024 24/02/2024 NA days
#> 2 456789 211 14/07/2024 15/07/2024 NA days
#> 3 789632 789 06/06/2024 08/09/2024 NA days
#> 4 123456 258 08/04/2024 10/04/2024 44 days
#> 5 456789 456 16/07/2024 20/07/2024 1 days
创建于 2024 年 10 月 30 日,使用 reprex v2.1.0