2013-06-27 4 views
0

У меня есть две таблицы, начало каждого из них приведены ниже:Как сравнить две таблицы, основанные на изменяющемся спецификации

Таблица 1: Все ОНП

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 приведен список генов с их соответствующим ОНПОМ. Как видно, один и тот же ген повторяется во многих местах таблицы.

Таблица 2 является результатом после фильтрации через все ОНП для каждого гена в таблице 1, и сохраняет только один СНП за гена (держит лучший SNP в соответствии с р-значение, хотя это не имеет значения Вот).

Иными словами, в таблице 1 есть некоторые SNP, которые не включены в таблицу 2, так как в таблице 2 поддерживается только лучший SNP для каждого гена.

Для каждый ген, я хочу использовать R для сравнения двух таблиц и вывода обратно SNP, которые не были включены в таблицу 2 для этого гена. Таким образом, спецификация для сравнения - это имя гена, которое будет меняться постоянно, так как в таблице много генов.

ответ

3

Предполагая, что все ОНП разные, попробуйте следующее:

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

спасибо, что это сработало! есть ли способ объединить результат для каждого гена? этот результат дает мне гены не по порядку, но, чтобы быть легким на глазах, могу ли я заказать выход этого кода по имени гена? поэтому один и тот же ген появится один за другим без разного гена, прерывающего порядок. – zfz

+2

+1 - Я сильно переутомил свой ответ на этот вопрос. Хороший. @zfzhao посмотреть 'порядок', например. 't3 <- подмножество (t1,! (t1 $ SNp% в% t2 $ SNP)); t3 <- t3 [order (t3 $ Gene, t3 $ SNP),] ' –

+0

благодарит :-) Извините еще одно, есть ли способ НЕ включать ** общий ** SNP для каждого гена между двумя таблицами? Этот код дает мне все SNP для каждого гена между двумя таблицами, но я просто хочу, чтобы SNP отсутствовали в таблице 2 по сравнению с таблицей 1 для каждого гена. – 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>