将重叠范围与数据帧中的开始和停止位置与其他非位置值相结合

问题描述 投票:0回答:1

我正在尝试总结爆破结果,以便我尝试确定重叠群(查询)与数据库条目(主题)的完整覆盖范围。我有一个数据框,其中包含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% 的总收敛性。

感谢您的时间和帮助。还没有发布很多问题,所以我也很感激任何改进的建议。

我尝试在堆栈溢出中搜索答案,但没有找到任何适合我的具体问题的答案。虽然折叠具有重叠范围的行确实有助于总结范围,但我不确定如何在除开始和停止之外具有多个值的表中应用。

r dataframe range
1个回答
0
投票

这可能仅适用于所呈现的这五行,并假设将包括第一行。我们得出一些指数进行总结 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 开始。

© www.soinside.com 2019 - 2024. All rights reserved.