【问题标题】:Splitting a dataframe into overlapping groups of equal sizes将数据帧拆分为大小相等的重叠组
【发布时间】:2018-04-23 08:01:21
【问题描述】:

我正在寻找一种方法将我的数据分成组,其中每个组由我定义的相同窗口大小组成。

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

例如,如果我希望窗口大小为 20,那么组将是:1-20、11-30、21 - 40。
只要组的大小不超过 20 就可以继续添加到同一个组中。

我尝试使用 split 功能,但无法以这种方式使用它。 有没有办法解决这个问题?

【问题讨论】:

  • 您能否提供一个您正在使用的数据的示例

标签: r iranges genomicranges


【解决方案1】:

一个向量(或数据框的列)可以像这样被分割成重叠的窗口:

# 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"

【讨论】:

    【解决方案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#intrarange 了解更多详情。

    【讨论】:

    • 谢谢,这是一个快速的方法。有没有办法控制 findOverlaps 认为它​​们重叠的距离?我正在阅读手册,但没有找到可以调整的参数。
    • 检查herehere,我认为它可以由maxgap, minoverlap管理
    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多