2015-11-20 3 views
0

Я искал здесь и в Google часами и не могу найти решение моей проблемы.Сравнение двух наборов данных в R

У меня есть два набора данных, содержащие гены. Один набор данных - это мой набор данных (привязка), и мне нужно выяснить, находятся ли эти гены во втором большем наборе данных (каталог). Я хочу, чтобы второй столбец был привязан (прокси) и 21-й столбец из каталога. Вот как выглядят мои наборы данных;

> head(snap) 
     SNP  Proxy Distance RSquared DPrime 
1 rs4246511 rs7540233  4541 0.874  1 
2 rs4246511 rs4970634 15768 0.874  1 
3 rs4246511 rs4532801 18960 0.874  1 
4 rs4246511 rs9438982 22242 0.874  1 
5 rs4246511 rs9438979 25034 0.874  1 
6 rs4246511 rs4414011 25868 0.874  1 

head(catalog) 
     SNPS MERGED SNP_ID_CURRENT CONTEXT INTERGENIC 
1 rs7079041  0  7079041  intron   0 
2 rs7244261  0  7244261 intergenic   1 
3 rs10448044  0  10448044 intergenic   1 
4 rs2610025  0  2610025 intergenic   1 
5 rs1472147  0  1472147  intron   0 
6 rs2648708  0  2648708  intron   0 

* Это небольшая часть наборов данных

Чтобы сделать его более сложным, я бы также хотел бы быть в состоянии вывести всю строку данных из обоих наборов данных.

Для первой части моего вопроса я попытался использовать сравнение (которое я нашел из другого аналогичного вопроса здесь). Я решил извлечь колонки, которые мне нужны, чтобы упростить вещи (прокси - это мой столбец из оснастки, а каталоги - столбец из каталога);

comparison <- compare(proxy, catalogsnps, allowAll=TRUE) 
comparison$tM 

difference <- data.frame(lapply(2:ncol(proxy),function(i)setdiff(cacheGenericsMetaData[,i],comparison$tM[,i]))) 
colnames(difference) <- colnames(proxy) 
write.table(difference, file="difference.csv", sep=";", dec=".") 

Однако с этим синтаксисом мой вывод - это просто список всех моих SNP из оснастки.

Выход

1054 6267 
1055 6273 
1056 6297 
1057 6297 
1058 6314 
1059 6331 
1060 6340 
1061 6345 
1062 6346 
1063 6350 
1064 6364 
1065 6412 
1066 6417 
1067 6417 
1068 6430 

Так как это было трудно читать, я добавил строку, чтобы получить файл Excel, это выглядит следующим образом;

x 
1 rs7079041 
2 rs7244261 
3 rs10448044 
4 rs2610025 
5 rs1472147 
6 rs2648708 
7 rs11891 
8 rs1801725 
9 rs6852678 
10 rs3135758 
11 rs6838240 
12 rs6838240 
13 rs603894 
14 rs3764796 
15 rs3764796 
16 rs2073214 
17 rs4971100 
18 rs4971100 
19 rs11718502 
20 rs10888073 
21 rs7032317 

Я также нашел другое возможное решение здесь, но у меня снова был только список моих SNP.

rows.diff <- function(catalog, proxy) 
{ 
    catalogsnps.vec <- apply(catalogsnps, 1, paste, collapse="") 
    proxy.vec <- apply(proxy, 1, paste, collaspse= "") 
    rows.diff <- catalogsnps[!catalogsnps.vec %in% proxy.vec,] 
    return(rows.diff) 
} 
write.table(rows.diff(catalogsnps, proxy), file="rowdiff.csv", sep=";", dec=",") 

Для второй части моего вопроса, я полностью потерял о том, где начать

Большое спасибо за любую помощь

Клэр

+1

Вы можете добавить несколько примеров данных к этому вопросу 'dput (head (proxy))' – anotherFishGuy

+0

Я редактировал свой пост с выходом, я думаю, что это то, что вы имели в виду? –

+0

Нет Клэр, он попросил вывести код, который он дал. Это способ поделиться образцом ваших входных данных, которые нужно прочитать в R. – Molx

ответ

0

Почему не просто:

new.data <- merge(snap, catalog, by.x='proxy', by.y='catalogsnps') 

Это должно дать вам новый фрейм данных, строки которого представляют собой только строки, в которых прокси и c atalogsnps match, а в столбцах которого указаны все столбцы исходных данных.

+0

Я получаю сообщение об ошибке «неожиданный ввод» –

+0

Что делать, если вы просто запустите третий ряд выше? (Первые два лишние, но я думал, что они могут уточнить). Значение, измените третью строку на: 'new.data <- merge (snap, catalog, by.x = 'proxy', by.y = 'catalogsnps')' –

+0

Я получаю новую ошибку; «Ошибка в файле fix.by (by.x, x): 'by' должен указывать однозначно допустимый столбец. –

Смежные вопросы