2013-06-27 3 views
0

J'ai deux tables, le début de chacun est donné ci-dessous:Comment comparer deux tableaux basés sur une spécification changer

Tableau 1: Tous les SNPs

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

Tableau 2: Meilleur PNS par gène

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

Le tableau 1 montre une liste de gènes avec leurs SNP correspondant. Comme on peut le voir, le même gène est répété dans de nombreux endroits du tableau.

Le tableau 2 est le résultat après filtration à travers tous les SNP pour chaque gène dans le tableau 1, et ne conserve que une SNP par gène (conserve mieux SNP selon le p-valeur, bien que ce soit pas pertinent ici).

En d'autres termes, il y a des SNPs dans le tableau 1 qui est pas dans le tableau 2, puisque le tableau 2 ne conserve que le meilleur SNP pour chaque gène. Pour chaque gène, je veux utiliser R pour comparer les 2 tableaux et renvoyer les SNP qui n'étaient pas inclus dans le tableau 2 pour ce gène. Ainsi, la spécification pour la comparaison est le nom du gène, qui changera constamment car il y a beaucoup de gènes dans le tableau.

Répondre

3

Si l'on suppose que tous les SNPs sont différents, essayez ceci:

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

merci cela a fonctionné! Existe-t-il un moyen de regrouper le résultat pour chaque gène? cette sortie me donne les gènes hors d'usage, mais pour être facile sur les yeux, je peux commander la sortie de ce code par le nom du gène? donc le même gène apparaîtra l'un après l'autre sans qu'un gène différent interrompe l'ordre. – zfz

+2

+1 - J'étais surmené ma réponse à cette question. Joli. @zfzhao regarde 'order', par ex. 't3 <- sous-ensemble (t1,! (t1 $ SNp% dans% t2 $ SNP)); t3 <- t3 [ordre (t3 gène $, t3 SNPs $),] ' –

+0

merci :-) Désolé une chose, est-il un moyen de ne pas inclure le SNP ** ** commun pour chaque gène entre les 2 tables? Ce code me donne tous les SNPs pour chaque gène entre les 2 tables, mais je veux juste les SNPs qui manquent dans le tableau 2 par rapport au tableau 1 pour chaque gène. – zfz

1

Une autre solution consiste à merge l'ensemble de données 2 et prendre les cas incomplets:

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

Alors ne garder que des gènes qui n » T existe dans les meilleurs:

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