как пересечь и добавить оценку в столбце? - PullRequest
0 голосов
/ 26 июня 2018

У меня есть два набора данных, я хотел бы найти перекрывающиеся / пересекающиеся / общие области между ними и, если есть какое-либо перекрытие, затем извлечь каждую исходную таблицу:

Данные 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)])

1 Ответ

0 голосов
/ 27 июня 2018

Я не уверен, что это то, что вы хотите. Не могли бы вы создать воспроизводимый пример, как описано здесь .

library(dplyr)

DataA <- data.frame(chr = c("chr1", "chr1", "chr1"), start = c(25,50,60), end = c(35,70,85))
DataB <- data.frame(chr = c("chr1", "chr1", "chr1"), start = c(10,55,76), end = c(15,75,82), score = c(24,14,10))

luA <-  Map(`:`, DataA$start, DataA$end)
luA <- data.frame(value = unlist(luA),
                 index = rep(seq_along(luA), lapply(luA, length)))

DataA[luA$index[match(DataB$start, luA$value)],]
DataB[luA$index[match(DataB$start, luA$value)],]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...