我有大约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%。这就是我要寻找的。也许我认为这并不困难。
答案 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)