从R中较大的数据帧中减去较小的数据帧,而没有唯一的行ID

时间:2016-11-28 16:06:46

标签: r

我在R中有两个数据框:大和小。较小的一个包含在较大的一个中。重要的是,任一数据帧中的每一行都没有唯一标识符。我如何获得以下内容:

  

大 - 小[大减小]

小数据帧(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完全相同。

任何帮助将不胜感激!谢谢。

2 个答案:

答案 0 :(得分: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"))

答案 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