再入院率(R)

再入院率(R),r,R,我想在几个月前提出的这个问题的基础上再接再厉 我有一些患者入院数据,我想让r检查患者入院状态,看看是否再次入院。如果患者状态是住院患者,我想回顾30天,看看是否还有其他住院患者遭遇。如果有另一个住院患者遭遇,我想填写一个30天的专栏,说是,否则填写否,如果没有。我有一些关于我需要什么的示例数据。每个患者都有一个唯一的MRN编号,该编号永远不会改变,但每次就诊都可以有多个遭遇编号。“df2”是我在评估“df”之后想要创建的。感谢您的帮助。我不确定上一篇文章是否会使用类似的设置 csn <-

我想在几个月前提出的这个问题的基础上再接再厉

我有一些患者入院数据,我想让r检查患者入院状态,看看是否再次入院。如果患者状态是住院患者,我想回顾30天,看看是否还有其他住院患者遭遇。如果有另一个住院患者遭遇,我想填写一个30天的专栏,说是,否则填写否,如果没有。我有一些关于我需要什么的示例数据。每个患者都有一个唯一的MRN编号,该编号永远不会改变,但每次就诊都可以有多个遭遇编号。“df2”是我在评估“df”之后想要创建的。感谢您的帮助。我不确定上一篇文章是否会使用类似的设置

csn <- c("11111","22222","33333","44444","55555","66666","77777")
mrn <- c("44322","81433","56311","44322","55121","61776","44322")
admit_date <- c("2017-02-01","2017-02-02","2017-02-04","2017-02-10","2017-02-12","2017-02-14","2017-02-18")
disch_date <- c("2017-02-03","2017-02-04","2017-02-04","2017-02-10","2017-02-16","2017-02-14","2017-02-25")
encounter_type <-c("Inpatient","Inpatient","Observation","ER","Inpatient","Observation","Inpatient")
readmission_30day <- c("no","no","no","no","no","no","yes")
df <- data.frame(csn,mrn,admit_date,disch_date,encounter_type)
df2 <- data.frame(csn,mrn,admit_date,disch_date,encounter_type,readmission_30day)

df
df2

csn好的,我已经为您提供了一个使用dplyr包的答案。我会尽力解释发生了什么,但你可能需要仔细阅读一下。如果您不知道管道操作符(%>%),请将其理解为“then”

#我们需要两个库
图书馆(tidyverse)#这提供了几个有用的软件包
图书馆(lubridate)#这让你更容易处理日期
#首先,我们创建一个包含相关案例的csn的表
#上次入院后的几天
parkDf%#我们采用我们的数据帧
mutate(account_date=as_date(account_date))%>%#将日期转换为日期格式
筛选(遭遇类型==“住院患者”)%>%#筛选出带有“住院患者”的病例
排列(mrn,录取日期)%>%\首先按mrn排序,然后按录取日期排序
分组依据(mrn)%>%#分组依据mrn,这样我们可以为每个患者。。。
mutate(dayssincelastaccess=admit_date-lag(admit_date))%>%#…获取自上次承认以来的天数
mutate(dayssincelastaccess=as.integer(dayssincelastaccess))%>%\将其转换为整数
解组()%>%#解组它(必须完成-不要问)
选择(csn,DaysSincelastAllow)#并仅保留这两列
#现在,我们将此连接到原始数据帧
df%>%
左连接(parkDf,by=“csn”)%>%
mutate(readmission_30day=if_else(is.na(dayssincelastaccess),“no”,“yes”))%>%创建所需变量
选择(-dayssincelastaccess)#并删除不需要的
如果你在谷歌上搜索“R for data science”或“r4ds”,你可以阅读更多关于所用函数的信息——这是一本由哈德利·威克姆(Hadley Wickham)写的书,他是一位伟大的作家。如果你不知道什么是左连接,只需谷歌“sql左连接”。它基本上是:获取右边的数据帧(我们新创建的数据帧),将其信息添加到左边的数据帧(原始数据帧)中,并通过匹配两个数据帧中存在的列来实现(按)


希望这有帮助。

看起来您的问题与链接的问题相同,数据结构非常相似。你试过贴在那里的解决方案了吗?进展如何?你被卡在哪里了?格雷戈里,非常感谢。我的真实数据集有一个出院日期,我没有在我的示例一中包括,但我能够取你给我的数据,计算入院日期和之前出院日期的差值,以获得30天的再入院时间。再次感谢您的时间和投入。@Gregory您能看看我问的这个问题吗。我试着把你给出的答案和那个问题混在一起,但我没有得到我想要的结果。
# we need 2 libraries
library(tidyverse) # this provides several useful packages
library(lubridate) # this lets you deal more easily with dates

# first, we create a table that contains the csn of the relevant cases
# and the days since last admission

parkDf <- df %>% # we take our data frame
    mutate(admit_date = as_date(admit_date)) %>% # turn the dates into date format
    filter(encounter_type == "Inpatient") %>% # filter out cases with "Inpatient"
    arrange(mrn, admit_date) %>% # sort them first by mrn and then by admit_date
    group_by(mrn) %>% # group them by mrn so we can for each patient...
    mutate(daysSinceLastAdmit = admit_date - lag(admit_date)) %>% # ...get the days since last admit
    mutate(daysSinceLastAdmit = as.integer(daysSinceLastAdmit)) %>% # turn this into an integer
    ungroup() %>% # ungroup it (must be done - don't ask)
    select(csn, daysSinceLastAdmit) # and keep only these two columns

# now we left-join this to our original dataframe
df %>%
    left_join(parkDf, by = "csn") %>%
    mutate(readmission_30day = if_else(is.na(daysSinceLastAdmit), "no", "yes")) %>% # create the wanted variable
    select(-daysSinceLastAdmit) # and remove the unwanted one