2016-10-02 121 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 –