Разделение фрейма данных на перекрывающиеся группы одинакового размера

Я ищу способ разделить свои данные на группы, где каждая группа состоит из того же размера окна, который я определяю.

      Chrom     Start   End        
      chr1       1    10      
      chr1       11   20      
      chr1       21   30      
      chr1       31   40 

Например, если я хочу, чтобы размер окна был равен 20, то группы будут такими: 1-20, 11-30, 21-40.
Пока размер группы не превышает 20, он может продолжать добавлять в ту же группу.

Я пытался использовать функцию разделения, но не смог реализовать этот способ с ее помощью. Есть ли способ обойти это?


person user12    schedule 23.04.2018    source источник
comment
не могли бы вы привести пример данных, которые вы используете, пожалуйста   -  person rg255    schedule 23.04.2018


Ответы (2)


Вектор (или столбец фрейма данных) можно разделить на перекрывающиеся окна следующим образом:

# Size of overlap
o <- 10
# Size of sliding window
n <- 20
# Dummy data
x <- sample(LETTERS, size = 40, replace = T)

# Define start and end point (s and e)
s <- 1
e <- n

# Loop to create fragments
for(i in 1:(length(x)/o)){

  assign(paste0("x", i), x[s:e])
  s <- s + o
  e <- (s + n) - 1

  }

# Call fragments  
x1
x2
x3

Результат:

> x
 [1] "F" "E" "G" "X" "R" "S" "L" "F" "F" "C" "I" "X" "A" "C" "B" "Z" "Q" "T" "W" "L" "G" "I" "B" "I" "O" "V" "J" "Z" "C" "R" "W" "Z" "F" "T" "N" "U" "F" "R" "A" "V"
> x1
 [1] "F" "E" "G" "X" "R" "S" "L" "F" "F" "C" "I" "X" "A" "C" "B" "Z" "Q" "T" "W" "L"
> x2
 [1] "I" "X" "A" "C" "B" "Z" "Q" "T" "W" "L" "G" "I" "B" "I" "O" "V" "J" "Z" "C" "R"
person rg255    schedule 23.04.2018

library(IRanges)
library(GenomicRanges)

(gr1 <- GRanges("chr1",IRanges(c(1,11,21,31),width=10),strand="*"))
(gr2 <- GRanges("chr1",IRanges(c(1,11,21),width=20),strand="*"))


fo <- findOverlaps(gr1, gr2)
queryHits(fo)
subjectHits(fo)

Проверьте http://genomicsclass.github.io/book/pages/bioc1_igranges.html#intrarange для более подробной информации.

person A. Suliman    schedule 23.04.2018
comment
Спасибо, это быстрый метод. Есть ли способ контролировать расстояние, на котором findOverlaps будет считать их перекрывающимися? Я читал руководство, но не нашел параметр, который мог бы настроить это. - person user12; 09.05.2018
comment
Проверьте здесь и здесь, я думаю, это может управляться maxgap, minoverlap - person A. Suliman; 09.05.2018