我在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完全相同。
任何帮助都将不胜感激!谢谢。
发布于 2016-11-28 16:11:03
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"))发布于 2016-11-28 16:38:19
以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 -9https://stackoverflow.com/questions/40848673
复制相似问题