0

我有两个非常大的基因列表,A 和 B。A 有两列:GeneID 和 p 值,而 B 只有一列 GeneID。B 中大约有 100,000 个基因,这些是 A 中基因的一个子集(这里大约有 700,000 个基因):

基因列表A
GeneID p.value
41931 0.0210
41931 0.0003
5310612 0.3161
5310612 0.7089
5310612 0.0021
98317 0.1139
98317 0.0009
215688 0.0031
215688 0.0008

基因列表B
基因ID
41931
41931
215688
215688

所需基因列表C
5310612 0.3161
5310612 0.7089
5310612 0.0021
98317 0.1139
98317 0.0009

我不希望 B 中的基因再出现在 A 中。如何在将 p 值保留在 A 中的同时摆脱它们?到目前为止,我尝试了三种不同的方法:

  1. 我去掉了我的 p 值列,所以两个列表都只有 Entrez Gene ID。然后我使用了以下代码:new<-A[setdiff(rownames(A),rownames(B)),],但我得到了一组与预期完全不同的基因。它是来自 A 和 B 的基因的看似随机的混合,而不是 AB

  2. 我也试过:new<-A[!apply(A,1,FUN=function(y){any(apply(B,1,FUN=function(x){all(x==y)}))}),]

  3. 最后,我尝试通过 EntrezGeneID 进行合并,但这也没有用。

我被这个摧毁了,所以任何帮助将不胜感激。

4

1 回答 1

0

您可以按运算符对数据框进行子集化%in%

GeneListA[!GeneListA$GeneID %in% GeneListB$GeneID, ]

结合!语句变为,在 GeneListA 中给我所有,其中 GeneID 不在 GeneListB 的 GendeID 中。

于 2014-02-16T06:26:45.293 回答