如何根据 3 个 IF 语句 select 行?

How to select rows based on 3 IF statements?

我有一个患者数据集。在此数据集中,我有 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 则包含在数据集中。

请大家帮忙

我们可以使用一点tidyrdplyr。首先我们 complete PhaseCode/PatientID 的所有组合,然后我们 group_by PatientID,然后我们从完成中删除那些有任何 NA 的患者:

library(tidyr)
library(dplyr)
dat %>% complete(PhaseCode, PatientID) %>%
        group_by(PatientID) %>%
        filter(!any(is.na(ID)))
subset(d, as.character(PatientID) %in% 
  names(which(tapply(PhaseCode, PatientID, function(x) length(unique(x)))==3)))