2016-11-28 68 views
1

我在R中有兩個數據幀:大和小。較小的一個包含在較大的一箇中。重要的是,兩個數據框中的每一行都沒有唯一的標識符。我怎樣才能得到如下:從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

With base 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 
相關問題