2016-10-02 2 views
-2

У меня около 25 datatables. Теперь я хочу найти перекрытия в первом столбце в некоторых таблицах и извлечь их. Кроме того, я хочу знать, сколько перекрытий есть и сколько процентов. Результат должен быть таблицей. Вот пример:R процент перекрытий

Таблица1:

Gen   Estimate Std. Error p-Value 
1007_s_at -0.159699 0.07834  0.04265 
1053_at  -0.174647 0.064535  0.0098976 
121_at  0.1765678 0.05116854 0.0000657 

Table2:

Gen  Estimate  Std. Error p-Value 
1494_f_at 0.2222467 0.0553653 0.0075838 
121_at  0.873683  0.00898737 0.0088378 
1316_at 0.098764  0.098456  0.048899 
1007_s_at 0.89723  0.5675389 0.00007865 

Таблица3:

Gen  Estimate  Std.Error p-Value 
1007_s_at 0.0864567 0.8931278 0.005542 
121_at  0.2378590 0.0236586 0.00005667 
1494_f_at 0.4597023 0.9875357 0.0091234 

Результат должен быть:

Gen  
1007_s_at  
121_at 

Overlapping rate: 20%  

Я попробовал функцию foverlaps, но это не сработало.

Я надеюсь, что кто-то может помочь. Благодаря!

Update:

Это будет мой список после слияния первого столбца всех таблиц (это будет очень долго - около 200,000 строк с соединением 46.000 разной genes-, так что это просто короткий пример) :

gene A 
gene B 
gene C 
gene D 
gene A 
gene E 
gene F 
gene A 
gene C 
gene A 
gene B 
gene D 
gene A 
gene E 
gene B 
gene A 
gene C 

Таким образом, мы имеем в 6 раз ген а, 3 раза ген В, 3 раза гена С, 2 раза гена D, 2 раза гена Е и только один раз, ген Е. всего мы имеем 17 генов. Это составляет 35% для гена A, 18% для гена B и 18% для гена C, 12% для гена D и гена E и 5% для гена F. Это то, что я ищу. Возможно, это не так сложно, я думаю.

ответ

1

Для этого вы можете использовать функцию duplicated().

Но сначала вам нужно объединить все строки первых колоний в один вектор. То, что вы делаете просто с функцией c(). Если ваши таблицы уже находятся в одном списке или в одном фрейме данных, это проще. Может быть, вы также можете использовать цикл, который вам не нужно писать так много, что зависит от имени вашего объекта. Было бы полезно, если бы у меня был минимальный рабочий пример.

merge.first <- c(table1[,1], table2[,1], table3[,1],....) 

Чем вы поиск дубликатов:

position.dup <- duplicated(merge.first) 

только в случае, если у Вас есть больше чем два дубликата:

names(table(merge.first[position.dup]) 

для вычисленного количества дубликатов, которые вы используете функцию sum():

sum(position.dup) 

И как вы рассчитываете процент, я не понимаю, что вы имеете в виду. В вашем примере у вас есть два перекрытия на десять строк, которые составляют процент от 20%, а не 28%. Поэтому я, к сожалению, не знаю, что вам нужно.

редактирования: теперь у меня есть один и тот же результат, как и вы:

> merge.vector 
[1] "A" "B" "C" "D" "A" "E" "F" "A" "C" "A" "B" 
[12] "D" "A" "E" "B" "A" "C" 
> round((table(merge.vector)/length(merge.vector)) * 100) 
merge.vector 
A B C D E F 
35 18 18 12 12 6 

эта линия делать то, что вы хотите:

round((table(merge.vector)/length(merge.vector)) * 100) 
+0

Спасибо! Когда я объединяю первые столбцы моих разных таблиц, у меня есть много перекрывающихся генов, но, возможно, и некоторые, которые не будут перекрываться. Например, у меня 300-кратный ген A (который составляет x%), и у меня есть только 20-кратный ген B (который составляет y%). И ген C встречается только один раз, нет перекрытий, что составляет 0%. Я хочу знать процент каждого гена. @and –

+0

Можете ли вы опубликовать некоторые данные, которые иллюстрируют этот момент - сделать его намного проще в обслуживании :) –

+0

Надеюсь, вам достаточно примера: @ и –

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