У меня есть два набора данных, я хотел бы найти перекрывающиеся / пересекающиеся / общие области между ними и, если есть какое-либо перекрытие, затем извлечь каждую исходную таблицу:
Данные A:
chr start end
chr1 25 35
chr1 50 70
chr1 60 85
Данные B:
chr start end score
chr1 10 15 24
chr1 55 75 14
chr1 76 82 10
таблицы ставок:
out put 1: результаты общих регионов
chr start end
chr1 55 70
chr1 70 75
chr1 76 82
выход 2: извлечение из данных A:
chr start end
chr1 50 70
chr1 60 85
выход 3: извлечение из данных B:
chr start end score
chr1 55 75 14
chr1 76 82 10
Я пробовал разные способы, но я не знаю, какой из них лучший:
library(GenomicRanges)
enhancer = with(dataA, GRanges(chr, IRanges(start=start, end=end)))
H3K4me1= with(dataB, GRanges(chr, IRanges(start=start, end=end)))
способ 1:
hits <- findOverlaps(dataA, dataB)
ranges(dataA)[queryHits(hits)] = ranges(dataB)[subjectHits(hits)]
dataA
dataB
way2:
over<- subsetByOverlaps(dataA, dataB)
путь 3:
inter = intersect(dataA, dataB)
путь 4:
groupA <- data.table(dataA)
setkey(groupA, chr, start, end)
groupB <- data.table(dataB)
setkey(groupB, chr, start, end)
over <- foverlaps(groupA, groupB, nomatch = 0)
over2 <- data.table(
chr = over$chr,
start = over[, ifelse(start > i.start, start, i.start)],
end = over[, ifelse(end < i.end, end, i.end)])