我有两个Excel文件
然后
我想知道覆盖范围值为0的范围和位置,输出如下:
在哪里
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中执行此操作?
答案 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)
的所有行的总和