У меня есть таблица (упрощенный вывод 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
имеетдва совпадающих удара с равным счетом, поэтому оба удара должны быть отброшены.