我有一个患者数据集。在这个数据集中,我有4列ID,PatientID,PhaseCode,EXAMDATE和EXCHANGE。
ID | PatientID | PhaseCode | EXAMDATE | EXCHANGE
--------------------------------------------------------
1 | 7366 | ADNI1 | 21/08/2015 | 1
2 | 7366 | ADNIGO | 21/08/2015 | 3
3 | 7366 | ADNI2 | 21/08/2015 | 2
4 | 7363 | ADNI1 | 21/08/2015 | 1
5 | 7363 | ADNI1 | 21/08/2015 | 1
6 | 7366 | ADNI1 | 21/08/2015 | 4
7 | 7366 | ADNIGO | 21/08/2015 | 5
8 | 7366 | ADNIGO | 21/08/2015 | 0
9 | 7366 | ADNI2 | 21/08/2015 | 1
有3种类型的相(ADNI1,ADNIGO,ADNI2),其中记录了数据。您可能已经注意到患者我的相同名称重复不止一次,或者只有一个阶段的记录。
我需要帮助选择记录所有阶段的患者。例如,如果患者没有ADNI2的记录,那么我想将其删除。条件类似于:如果患者7366记录了相位代码等于ADNI1的情况,则ADNIGO和ADNI2将包含在数据集中。
请帮助。
答案 0 :(得分:3)
我们可以使用一点tidyr
和dplyr
。首先我们complete
PhaseCode / PatientID的所有组合,然后我们group_by
PatientID,然后我们删除那些完成NA的患者:
library(tidyr)
library(dplyr)
dat %>% complete(PhaseCode, PatientID) %>%
group_by(PatientID) %>%
filter(!any(is.na(ID)))
答案 1 :(得分:1)
subset(d, as.character(PatientID) %in%
names(which(tapply(PhaseCode, PatientID, function(x) length(unique(x)))==3)))