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_admission
、date_discharge
和 age
列的第一个和最后一个值,但您也可以计算平均值(尽管在这种情况下这没有多大意义):
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 非常有用。
我有一个包含重复测量的多级记录数据集(示例如下)。
我知道在 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_admission
、date_discharge
和 age
列的第一个和最后一个值,但您也可以计算平均值(尽管在这种情况下这没有多大意义):
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 非常有用。