我有一个包含患者遭遇的数据框,并且只想提取每个患者的最早遭遇(可以使用顺序遭遇 ID 来完成)。我想出的代码有效,但我确信有更有效的方法可以使用 dplyr 执行此任务。你会推荐什么方法?
4 位患者 10 次相遇的示例:
encounter_ID <- c(1021, 1022, 1013, 1041, 1007, 1002, 1003, 1043, 1085, 1077)
patient_ID <- c(855,721,821,855,423,423,855,721,423,855)
gender <- c(0,0,1,0,1,1,0,0,1,0)
df <- data.frame(encounter_ID, patient_ID, gender)
结果(期望和获得):
encounter_ID patient_ID gender
1003 855 0
1022 721 0
1013 821 1
1002 423 1
我的方法
1)提取唯一患者的列表
list.patients <- unique(df$patient_ID)
2)创建一个空数据框来接收我们每个患者第一次遇到的输出
one.encounter <- data.frame()
3)遍历列表中的每个患者以提取他们的第一次遭遇并填充我们的数据框
for (i in 1:length(list.patients)) {
one.patient <- df %>% filter(patient_ID==list.patients[i])
one.patient.ordered <- one.patient[order(one.patient$encounter_ID),]
first.encounter <- head(one.patient.ordered, n=1)
one.encounter <- rbind(one.encounter, first.encounter)
}
