record_id 定义的块上的平均患者水平变量

average patient level variables on blocks defined by record_id

我有一个包含重复测量的多级记录数据集(示例如下)。
我知道在 MLwiN 中可以对 record_id 定义的块上的这些患者水平变量(年龄,date_admission,date_discharge)进行平均,是否可以在 R 中做同样的事情?
目前,如果我尝试查找停留时间 (date_discharge - date_admission),它会显示为 NA,大概是因为它们在不同的行中。如果我尝试任何多级建模,它会将数据集限制为 obs_id“1”和“8”,其中存在年龄。
非常感谢,安娜玛丽

obs_id  record_id   day age tn  date_admission  date_discharge
1           1       0   40  122 12/02/2015 00:00        
2           1       1       90          
3           1       2       71          
4           1       3       71          
5           1       4       75          
6           1       5       73                  
7           1       182                         17/02/2015 00:00    
8           2       0   58  139 14/02/2015 00:00        
9           2       1       130         
10          2       2       119         
11          2       3       106         
12          2       4       102         
13          2       5       111                 
14          2       182                         19/02/2015 00:00

我相信您的主要问题是如何将数据转换成一种格式,以便大多数 R 例程(例如 lme4)都可以使用该格式。

为了让您在 R 中找到示例,我添加了一些逗号。接下来我将日期转换为 R 使用的内部日期格式(其中之一实际上是 POSIXct):

lines <- "obs_id,  record_id,   day, age, tn,  date_admission,  date_discharge
1           ,1       ,0   ,40  ,122 ,12/02/2015 00:00,       
2           ,1       ,1   ,    ,90  ,        ,
3           ,1       ,2   ,    ,71  ,        ,
4           ,1       ,3   ,    ,71  ,        ,
5           ,1       ,4   ,    ,75  ,        ,
6           ,1       ,5   ,    ,73  ,                ,
7           ,1       ,182 ,   ,     ,                ,17/02/2015 00:00
8           ,2       ,0   ,58  ,139 ,14/02/2015 00:00,        
9           ,2       ,1   ,    ,130 ,        ,
10          ,2       ,2   ,    ,119 ,        ,
11          ,2       ,3   ,    ,106 ,        ,
12          ,2       ,4   ,    ,102 ,        ,
13          ,2       ,5   ,    ,111 ,                ,
14          ,2       ,182 ,   ,     ,                ,19/02/2015 00:00"

data <- read.csv(textConnection(lines))
data$date_admission <- as.POSIXct(data$date_admission, format="%d/%m/%Y %H:%M")
data$date_discharge <- as.POSIXct(data$date_discharge, format="%d/%m/%Y %H:%M")

然后您需要为患者的每条记录提供入院和出院日期。有许多方法可以做到这一点,但其中之一是使用 dplyr 包。我们首先按 record_id 对数据进行分组,然后我们可以对每个患者进行计算。下面我取 date_admissiondate_dischargeage 列的第一个和最后一个值,但您也可以计算平均值(尽管在这种情况下这没有多大意义):

library(dplyr)

data <- data %>% group_by(record_id) %>% mutate(
    date_admission = first(date_admission), 
    date_discharge = last(date_discharge), 
    age = first(age),
    duration = difftime(date_discharge, date_admission, "days"))

dplyr 上的快速 google 会给你大量的包介绍以获取更多信息。特别是 data wrangling cheat sheet 非常有用。