Разбиение блока данных на перекрывающиеся группы одинакового размера
Я ищу способ разбить мои данные на группы, где каждая группа состоит из того же размера окна, который я определяю.
Chrom Start End
chr1 1 10
chr1 11 20
chr1 21 30
chr1 31 40
Например, если я хочу размер окна 20, то группы будут: 1-20, 11-30, 21-40.
Пока размер группы не превышал 20, он может продолжать добавление в ту же группу.
Я попытался использовать функцию split, но не смог реализовать этот способ, используя ее. Это можно обойти?
2 ответа
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 для получения дополнительной информации.
Вектор (или столбец кадра данных) можно разбить на перекрывающиеся окна, например:
# 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"