Получите частоту совпадений геномных диапазонов в 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)
Другие вопросы по тегам