Получите частоту совпадений геномных диапазонов в R
Я использовал пакет GenomicRanges R, чтобы найти совпадения между двумя наборами геномных диапазонов. Выходные данные функции findOverlaps дают две информации: 1. номера строк диапазонов, которые перекрывают список формы A 2. номера строк диапазонов, которые перекрываются из списка B.
Я заинтересован в перекрытиях из списка A и хотел бы добавить столбец в список A, указывающий количество перекрытий для каждой строки.
Вот воспроизводимый пример, который вы можете напрямую использовать в R:
#Define SetA
chrA = c(7,3,22)
startA = c(127991052,37327681,50117297)
stopA = c(127991052,37327681,50117297)
SetA = data.frame(chrA,startA,stopA)
#Define SetB
chrB = c(1,3,22,22)
startB = c(105278917,37236502,46384621,49214228)
stopB = c(105451039,37411958,50796976,50727239)
SetB = data.frame(chrB,startB,stopB)
#Find Overlaps between SetA and SetB
library(GenomicRanges)
gr0 = with(SetA, GRanges(chrA, IRanges(start=startA, end=stopA)))
gr1 = with(SetB, GRanges(chrB, IRanges(start=startB, end=stopB)))
hits = findOverlaps(gr0, gr1)
hits = data.frame(hits) #the fist col of hits is the row numbers (from SetA) of genomic ranges that overlap with SetB
mat
Я хочу добавить столбец в SetA, указывающий частоту перекрытия с SetB для каждой строки. Вот моя попытка и вывод, который мне нужно получить:
#Calculate frequencies:
OverlapFreq = data.frame(table(hits$queryHits)) #calculate frequencies for the first col in hits
OverlapFreq
#expected output:
SetA$OverlapFreq = c(0,1,2)
SetA
Любые предложения о том, как этого добиться, очень ценятся!
2 ответа
Я понял ответ, и это просто использовать функцию countOverlaps из того же пакета:
OverlapFreq = countOverlaps(gr0,gr1)
Также используется версия функции plyranges:
# direct
gr0$n_overlaps <- count_overlaps(gr0, gr1)
# dplyr style
overlaps <- gr0 %>% mutate(n_overlaps = count_overlaps(., gr1))
Я также рекомендую plyranges для операций соединения.
# return overlapping ranges
find_overlaps(gr0,gr1)