我有一个表(简化的hmmer
输出),需要对其进行排序和过滤:
query hit start end score
A hit1 56 102 0.00085
B hit2 89 275 0.00034
B hit3 240 349 0.00034
C hit4 332 480 3.40E-15
D hit5 291 512 3.80E-24
D hit6 287 313 0.00098
D hit7 381 426 0.00098
D hit8 287 316 0.0029
D hit9 373 422 0.0029
对于每个查询,该表均应按start
排序,如果匹配项重叠,则将匹配项的score
放在较低的位置。
到目前为止,这是我的代码,该代码首先按开始排序,然后按得分排序。
data <- read.table("table")
list = c()
list <- unique(as.vector(unlist(data$query)))
for (i in list) {
extracted = c()
extracted = subset(data, data$query == i)
extracted = extracted[order(extracted$start, extracted$score), ]
}
但是我该如何检查重叠并删除得分较高的那个?
这是我的预期输出:
query hit start end score
A hit1 56 102 0.00085
C hit4 332 480 3.40E-15
D hit5 291 512 3.80E-24
请注意,该查询B
具有两个重叠的匹配且得分相等的匹配,因此应将两个匹配都排除在外。