从R中的数据集中减去大量特定行

时间:2014-02-16 06:05:24

标签: r genome

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

GeneListA
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

GeneListB 
GeneID
41931
41931
215688
215688

Desired GeneListC
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基因看似随机的混合物,而不是A-B

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

  3. 最后,我尝试通过EntrezGeneID合并,但这也没用。
  4. 我被这个摧毁了,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

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

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

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