2013-06-27 16 views
0

我有两个表,每个的开始如下:如何比较基础上不断变化的规范两个表

表1:所有SNP

SNp   Gene 
rs1798922 ENSG00000167634 
rs4677723 ENSG00000167634 
rs1609823 ENSG00000104450 
rs11597390 ENSG00000104643 
rs7824557 ENSG00000104643 
rs1371867 ENSG00000104450 

表2:最佳SNP每个基因

SNP   Gene 
rs1371867 ENSG00000104450 
rs7824557 ENSG00000104643 
rs1671152 ENSG00000167634 
rs11597390 ENSG00000095485 
rs285757 ENSG00000185442 

表1示出的基因与它们的对应的SNP的列表。可以看出,表中许多地方重复了同样的基因。

表2是通过所有的SNP为每个基因在表1中滤波之后的结果,而仅一个保持SNP 基因(保持最好的SNP根据p值,尽管这不是相关这里)。

换句话说,表1中有一些SNP未包含在表2中,因为表2仅保留每个基因的最佳SNP。

对于每个基因,我想用R来比较2个表格,并输出表2中未包括的那个SNP。所以比较的规格是基因名称,由于表格中有许多基因,所以它会不断变化。

回答

3

假设所有SNP是不同的,试试这个:

subset(t1,!(t1$SNp %in% t2$SNP)) 
+0

感谢这工作!有没有办法将每个基因的结果结合在一起?这个输出给我的基因乱序,但要容易在眼睛上,我可以通过基因名称命令这个代码的输出?所以同一个基因会一个接一个地出现,而不会有一个不同的基因打断这个顺序。 – zfz

+2

+1 - 我对这个问题的回答严重过度。好一个。 @zfzhao看'订单',例如t3 < - subset(t1,!(t1 $ SNp%in%t2 $ SNP)); t3 < - t3 [order(t3 $ Gene,t3 $ SNP),]' –

+0

谢谢:-)对不起,还有一种方法是不包含2个表之间每个基因的** common ** SNP?该代码为我提供了两张表格之间每个基因的所有SNP,但我真的只想要表2中的每个基因与表1相比缺失的SNP。 – zfz

1

另一个解决方案是merge 2数据集,并采取不完整的情况:

res <- merge(dat.all,dat.best,by.x='SNP',by.y='SNP', 
      suffixes =c('.all','.best'), 
      all.x=TRUE,all.y=TRUE) 

然后只保留没有按”基因t内存在最好的:

res[is.na(res$Gene.best),] 
     SNP  Gene.all Gene.best 
3 rs1609823 ENSG00000104450  <NA> 
4 rs1798922 ENSG00000167634  <NA> 
5 rs4677723 ENSG00000167634  <NA>