2017-02-22 31 views
1

У меня есть огромные данные «RANGE», эти данные в формате GenomicRanges, если преобразовать это data.frame, следует один пример:Как преобразовать диапазон на отдельные позиции

file <- "seqnames start end width strand 
chr1 2 5 4  * 
chr2 3 7 5  *" 
file<-read.table(text=file,header=T) 

Я хотел бы для разложения этих «диапазонов» в отдельных позициях, подобных этому примеру:

file2 <- "seqnames Position 
chr1 2 
chr1 3 
chr1 4 
chr1 5 
chr2 3 
chr2 4 
chr2 5 
chr2 6 
chr2 7" 

file2 <- read.table(text=file2,header=T) 

Как это сделать?

ответ

2

При использовании Bioconductor GenomicRanges, то

> GPos(GRanges(c("chr1:2-5", "chr2:3-7"))) 
GPos object with 9 positions and 0 metadata columns: 
     seqnames  pos strand 
     <Rle> <integer> <Rle> 
    [1]  chr1   2  * 
    [2]  chr1   3  * 
    [3]  chr1   4  * 
    [4]  chr1   5  * 
    [5]  chr2   3  * 
    [6]  chr2   4  * 
    [7]  chr2   5  * 
    [8]  chr2   6  * 
    [9]  chr2   7  * 
    ------- 
    seqinfo: 2 sequences from an unspecified genome; no seqlengths 

возможно первый с

GRanges(file) 
1

Мы можем использовать data.table

library(data.table) 
setDT(file)[, .(position = start:end), by = seqnames] 

# seqnames position 
# 1:  chr1  2 
# 2:  chr1  3 
# 3:  chr1  4 
# 4:  chr1  5 
# 5:  chr2  3 
# 6:  chr2  4 
# 7:  chr2  5 
# 8:  chr2  6 
# 9:  chr2  7