2015-11-05 34 views
3

我有一個患者數據集。在這個數據集中,我有4列ID,PatientID,PhaseCode,EXAMDATE和EXCHANGE。如何根據3個IF語句選擇行?

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 

存在數據被記錄的相(ADNI1,ADNIGO,ADNI2)有3種類型。正如您可能已經注意到,我的患者有相同的階段名稱重複不止一次,或者可能只有一個階段的記錄。

我需要幫助選擇記錄所有階段的患者。例如,如果患者沒有ADNI2記錄,那麼我想將其刪除。條件如下:如果患者7366記錄了相位編碼等於ADNI1的記錄,則ADNIGO和ADNI2包含在數據集中。

請給予幫助。

回答

3

我們可以使用一點tidyrdplyr。首先,我們complete PhaseCode/PatientID的所有組合,那麼我們group_by PatientID,那麼我們會刪除那些有任何NA從完成患者:

library(tidyr) 
library(dplyr) 
dat %>% complete(PhaseCode, PatientID) %>% 
     group_by(PatientID) %>% 
     filter(!any(is.na(ID))) 
+0

我不斷收到此錯誤:「錯誤function_list [我]](value):找不到函數「complete」 –

+0

你是否安裝了最新版本的tidyr?嘗試運行'install.packages(「tidyr」)' – jeremycg

+0

是的,但由於某種原因沒有工作。它在不同的機器上,它工作:)謝謝! –

1
subset(d, as.character(PatientID) %in% 
    names(which(tapply(PhaseCode, PatientID, function(x) length(unique(x)))==3)))