R重叠百分比

时间:2016-10-02 13:01:23

标签: r percentage

我有大约25个数据表。现在我想在一些表的第一列中找到重叠并提取它们。此外,我想知道有多少重叠和多少百分比。输出应该是一个表。这是一个例子:

表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种不同的基因 - 所以这只是一个简短的例子):

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为35%,基因B为18%,基因C为18%,基因D和基因E为12%,基因F为5%。这就是我要寻找的。也许我认为这并不困难。

1 个答案:

答案 0 :(得分: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)