我正在尝试总结爆破结果,以便我尝试确定重叠群(查询)与数据库条目(主题)的完整覆盖范围。我有一个数据框,其中包含blast的通常输出,但我专注于查询长度(qlen)、查询匹配主题的长度(长度)、查询开始位置(qstart)和查询停止位置(qend)以及查询覆盖率( qcovhsp)。这是一个查询组装/重叠群组合的示例。
可重现的示例
df = data.frame(qlen=c(100, 100, 100, 100, 100), length=c(10, 10, 15, 30, 10), qstart=c(1, 25, 30, 50, 70), qend=c(10, 34, 44, 79, 79), qconhsp=c(10, 10, 15, 30, 10))
qlen | 长度 | q开始 | q结束 | qcovhsp |
---|---|---|---|---|
100 | 10 | 1 | 10 | 10 |
100 | 10 | 25 | 34 | 10 |
100 | 15 | 30 | 44 | 15 |
100 | 30 | 50 | 79 | 30 |
100 | 10 | 70 | 79 | 10 |
我想总结上表,以便合并重叠的范围,因此如果一个范围已经覆盖了另一行的范围,它会吸收该行的范围(例如:第 4 行吸收 5),或者如果范围重叠,则它们会被合并(第 2 行和第 3 行合并)。并根据需要重新计算长度和 qconvhsp。
qlen | 长度 | q开始 | q结束 | qcovhsp |
---|---|---|---|---|
100 | 10 | 1 | 10 | 10 |
100 | 20 | 25 | 44 | 20 |
100 | 30 | 50 | 79 | 30 |
我使用下一个脚本来总结上表,以获得总查询覆盖率(在本例中为 60%)。我将保留覆盖率超过 70% 的组装/重叠群组合。使用它来对完整质粒数据库进行完整组装,并保持重叠群具有 98% 的同一性(已过滤)和 70% 的总收敛性。
感谢您的时间和帮助。还没有发布很多问题,所以我也很感激任何改进的建议。
我尝试在堆栈溢出中搜索答案,但没有找到任何适合我的具体问题的答案。虽然折叠具有重叠范围的行确实有助于总结范围,但我不确定如何在除开始和停止之外具有多个值的表中应用。
这可能仅适用于所呈现的这五行,并假设将包括第一行。我们得出一些指数进行总结 df 并且仍然需要重新计算覆盖率
df_mtx = matrix(unlist(c(df[1, ], c(df[which.min(diff(df$qstart)), 1:3], df[which.min(diff(df$qstart)) +1, 4:5]),
c(df[which.min(diff(df$qend)), 1:3], df[which.min(diff(df$qend)) +1, 4:5]))),
nrow = 3, ncol = 5, byrow = TRUE)
df_mtx
[,1] [,2] [,3] [,4] [,5]
[1,] 100 10 1 10 10
[2,] 100 10 25 45 15
[3,] 100 30 50 80 10
df_mtx[2:3, 5] = df_mtx[2:3, 4] - df_mtx[2:3, 3]
df_mtx
[,1] [,2] [,3] [,4] [,5]
[1,] 100 10 1 10 10
[2,] 100 10 25 45 20
[3,] 100 30 50 80 30
考虑我们的指数
diff(df$qend)
[1] 25 10 35 0
diff(df$qend) == 0
[1] FALSE FALSE FALSE TRUE
df[diff(df$qend) == 0, ]
qlen length qstart qend qconhsp
4 100 30 50 80 30
我们可以只使用 df[diff(df$qend) == 0, ] 作为我们的第三行,而不是上面复杂的嵌入式 c( ,依靠 diff == 0 来表示两个重叠的末端。
所以,笨重、机械,可能无法有效地扩展到我们这里的五行之外。记住也很有用,索引
diff
从 2 开始。