我在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完全相同。
任何帮助将不胜感激!谢谢。
答案 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