首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R中的较大数据帧中减去一个较小的数据帧,而没有唯一的行ID

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

Stack Overflow用户
提问于 2016-11-28 16:06:46
回答 2查看 731关注 0票数 1

我在R中有两个数据帧:大的和小的。较小的一个包含在较大的一个中。重要的是,这两种数据帧中的每一行都没有唯一的标识符。我如何取得下列资料:

大、小、大、小

小数据帧(SmallDF):

代码语言:javascript
复制
     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):

代码语言:javascript
复制
      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。

我试过以下几种方法。

代码语言:javascript
复制
BigDF[ !(BigDF$ID %in% SmallDF$ID), ] 

这不起作用,因为两行都有唯一的标识符。我得到的输出与BigDF完全相同。

我也尝试了以下几点。

代码语言:javascript
复制
library(dplyr)
setdiff(BigDF, SmallDF)

我收到的输出与BigDF完全相同。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-28 16:11:03

代码语言:javascript
复制
library(dplyr)
anti_join(BigDF, SmallDF)

这相当于:

代码语言:javascript
复制
anti_join(BigDF, SmallDF, by=c("ID", "CSF1PO", "CSF1PO.1", "D10S1248", "D10S1248.1", "D12S391", "D12S391.1"))

显然,如果有两个唯一标识行的变量,则可以仅在传递给by的向量中指定这些变量。

代码语言:javascript
复制
anti_join(BigDF, SmallDF, by=c("ID", "CSF1PO.1"))
票数 3
EN

Stack Overflow用户

发布于 2016-11-28 16:38:19

以R为基数:

代码语言:javascript
复制
BigDF[-which(duplicated(rbind(BigDF, SmallDF), fromLast = TRUE)),]

产出:

代码语言:javascript
复制
       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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40848673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档