2016-11-28 3 views
1

私は、R:LargeとSmallの2つのデータフレームを持っています。小さなものは大きなものに含まれています。重要なのは、いずれかのデータフレームの各行に固有の識別子がないことです。どのようにして、以下を得ることができる: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) 

これは同等です:あなたが行を一意に識別する2つの変数を持っていた場合、あなたはbyに渡されたベクトルにちょうどこれらの変数を指定することができ、明らかに

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

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 
関連する問題