2013-05-01 136 views
14

假設我有一個較大的數據框和一個較小的數據框。如果較小的一個被包含在較大的一個的內部,如何可以有:從另一個數據框中減去一個數據框

更大 - 更小

實施例:

小數據幀:

 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 2013-05-01 23:23:50

+0

ID實際上是行名...不是數據框中的列,但是如果需要,我可以將其設置爲列。 – vitor 2013-05-01 23:26:50

+1

不需要。只需使用'rownames(Big)'代替'Big $ ID'。 – Frank 2013-05-01 23:29:40

回答

17

試試這個:

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

在dplyr:

library(dplyr) 

setdiff(BigDF, SmallDF) 

更多信息:哈德利的DPLY的cheatsheet:結合實例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) 
相關問題