R 重叠百分比
R percentage of overlaps
我有大约 25 个数据table。现在我想在某些 table 的第一列中找到重叠部分并提取它们。此外,我想知道有多少重叠以及多少百分比。输出应该是 table。这是一个例子:
表 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 功能,但没有用。
我希望有人能提供帮助。谢谢!
更新:
这将是我合并所有 table 的第一列后的列表(它将很长 - 大约 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%。这就是我要寻找的。可能没我想的那么难。
您可以为此使用 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)
我有大约 25 个数据table。现在我想在某些 table 的第一列中找到重叠部分并提取它们。此外,我想知道有多少重叠以及多少百分比。输出应该是 table。这是一个例子:
表 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 功能,但没有用。
我希望有人能提供帮助。谢谢!
更新:
这将是我合并所有 table 的第一列后的列表(它将很长 - 大约 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%。这就是我要寻找的。可能没我想的那么难。
您可以为此使用 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)