2016-11-28 2 views
1

У меня есть два кадра данных в R: Large и Small. Меньшая часть содержится в большем. Важно отметить, что для каждой строки в любом фрейме данных нет уникальных идентификаторов. Как я могу получить следующее:Вычитание меньшего кадра данных из большего кадра данных в R без уникальной строки ID

Большой - Малый [большой минус небольшой]

Малые данные кадра (SmallDF):

 ID  CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1 
203079   10  11  14   16  -9  -9 
203079   8  12  14   17  -9  -9 
203080   10  12  13   13  -9  -9 

Большие данные кадра (BigDF):

 ID  CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1 
203078   -9  -9  15   15  18  20 
203078   -9  -9  14   15  17  19 
203079   10  11  14   16  -9  -9 
203079   8  12  14   17  -9  -9 
203080   10  12  13   13  -9  -9 
203080   10  11  14   16  -9  -9 
203081   10  12  14   16  -9  -9 
203081   11  12  15   16  -9  -9 
203082   11  11  13   15  -9  -9 
203082   11  11  13   14  -9  -9  

Небольшой кадр данных соответствует строкам 3, 4 и 5 большему кадру данных.

Я пробовал следующее.

BigDF[ !(BigDF$ID %in% SmallDF$ID), ] 

Это не работает, потому что в каждой строке есть уникальные идентификаторы. Выход, который я получаю, точно такой же, как BigDF.

Я также пробовал следующее.

library(dplyr) 
setdiff(BigDF, SmallDF) 

Выход, который я получаю, точно такой же, как BigDF.

Любая помощь будет оценена! Благодарю.

ответ

3
library(dplyr) 
anti_join(BigDF, SmallDF) 

Это эквивалентно:

anti_join(BigDF, SmallDF, by=c("ID", "CSF1PO", "CSF1PO.1", "D10S1248", "D10S1248.1", "D12S391", "D12S391.1")) 

Очевидно, что если у вас две переменные, которые однозначно идентифицируют строку, вы можете указать только эти переменные в векторе передается by:

anti_join(BigDF, SmallDF, by=c("ID", "CSF1PO.1")) 
2

С основанием R:

BigDF[-which(duplicated(rbind(BigDF, SmallDF), fromLast = TRUE)),] 

с выходом:

 ID CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1 
1 203078  -9  -9  15   15  18  20 
2 203078  -9  -9  14   15  17  19 
6 203080  10  11  14   16  -9  -9 
7 203081  10  12  14   16  -9  -9 
8 203081  11  12  15   16  -9  -9 
9 203082  11  11  13   15  -9  -9 
10 203082  11  11  13   14  -9  -9