我有两个非常大的基因列表,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的同时摆脱它们?到目前为止,我尝试了三种不同的方法:
我删除了我的p值列,因此两个列表只有Entrez Gene ID。然后我使用了以下代码:new<-A[setdiff(rownames(A),rownames(B)),]
,但我得到了一组完全不同于预期的基因。它是A和B基因看似随机的混合物,而不是A-B
我也尝试过:new<-A[!apply(A,1,FUN=function(y){any(apply(B,1,FUN=function(x){all(x==y)}))}),]
我被这个摧毁了,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
您可以通过%in%
运算符对数据框进行子集化。
GeneListA[!GeneListA$GeneID %in% GeneListB$GeneID, ]
结合语句变为!
,在GeneListA中给我所有,其中GeneID不在GeneListB的GendeID中。