2016-10-02 119 views
-2

我有大約25個數據表。現在我想在一些表格的第一列中找到重疊並提取它們。此外,我想知道有多少重疊,有多少百分比。輸出應該是一個表格。這裏有一個例子: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 

表2:

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功能,但沒有奏效。

我希望有人能幫忙。謝謝!

更新:

這將是合併所有表格的第一欄後,我的名單(這將是很長 - 約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次基因A,3次基因B,3次基因C,2次基因d,2次基因E和只有1次基因E.共我們有17個基因。基因A的基因A爲35%,基因B爲18%,基因C爲18%,基因D和基因E爲12%,基因F爲5%。這就是我正在尋找的。也許這並不困難,我想。

回答

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) 

而你如何計算百分比,我不明白你的意思。在你的例子中,你有兩個重疊十行,佔百分之二十而不是百分之二十八。所以我不幸地不知道你需要什麼。

編輯: 現在我有同樣的結果,像你這樣的:

> 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

我希望這個例子對你來說足夠了:) @and –