2013-05-01 7 views
14

データフレームが大きく、小さいものがあるとします。小さい方が大きい方の内部に収容されている場合は、どのように私が持つことができます。もう一方のデータフレームから1つのデータフレームを引く

大きい - 小規模

例:

小データフレーム:

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

ビッグデータフレーム:

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

小さいデータフレームは、大きなデータフレームの3,4,5行に対応します。

ありがとうございます!

+1

'ID 'がキー(一意に残りの行を決定する)であれば、' Big [!(Big $ ID%in%Small $ ID)]]が動作するはずです。鍵がなければ扱いにくいですよね。 – Frank

+0

IDは実際に行の名前です...データフレームの列ではありませんが、必要に応じて列にすることができます。 – vitor

+1

不要です。 'Big $ ID'の代わりに' rownames(Big) 'を使うだけです。 – Frank

答えて

17

これを試してみてください:dplyrで

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

library(dplyr) 

setdiff(BigDF, SmallDF) 

詳細:ハドレーのDPLYチートシート:例とhttps://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

簡潔Set操作機能http://rpackages.ianhowson.com/cran/dplyr/man/setops.html

(しかし、全体Grammar of Data Manipulationは全体的に素晴らしいリソースである)そして、以下があなたの質問に直接答えではありません - それは頻繁に私のために関連している(と非常に有用であった)

あなたが新しいデータフレームと(同じレコードの内側)に同じデータフレームの前のバージョンあなたのコードを作りたいだろうとの間で発生した新しい変更を取得したい場合

は、以下のようになります:

setdiff(NewDF, OldDF) 
関連する問題