查找零范围和位置数

时间:2018-12-10 19:01:08

标签: r

我有两个Excel文件

enter image description here

然后

enter image description here

我想知道覆盖范围值为0的范围和位置,输出如下:

enter image description here

在哪里

size = (end - start)+1

mapped = positions with > 0 Coverage

%mapped = (mapped/size)*100

Completeness = (Total mapped/Total Size)*100

例如,对于上述输出,完整性=(((3 + 2)/(7 + 5))* 100 = 41.66%

我有几个这样的输入文件需要分析。如何在R中执行此操作?

1 个答案:

答案 0 :(得分:0)

要了解data.frame的哪一部分满足某些条件,可以使用which,它将为您提供该条件为TRUE的所有索引,因此您可以使用它来获得您感兴趣的零件。

如果我们假设问题的第一部分有一个名为df1的data.frame,第二个图像是df2,那么您可以获取其中的行的索引范围带有'chr1'的df1,例如:
range <- which(df1$chr=='chr1')[df2$start[1]]:which(df1$chr=='chr1')[df2$end[1]]
或者,您可以使用df2$chr[1]来代替手动键入'chr1'。
对于计数,sum(df1[range, 'coverage'] > 0)告诉您多少个值等于零。

现在我们需要对所有行进行相同的操作,我们可以使用sapply对所提供的所有值进行操作:

df2$mapped <- sapply(1:nrow(df2), function(row) {
    range <- which(df1$chr==df2$chr[row])[df2$start[row]]:which(df1$chr==df2$chr[row])[df2$end[row]]
    sum(df1[range, 'coverage'] > 0)
}

您的其他问题更容易回答,因为在R中,大多数函数都是矢量化的:您可以同时对多个值进行操作。

df2$size = (df2$end - df2$start)+1
df2$perc_mapped = (df2$mapped/df2$size)*100

完成度是sum(df2$size)sum(df2$mapped)的所有行的总和