[BioC] reodering a GRanges object by its metadata

Martin Morgan mtmorgan at fhcrc.org
Thu Feb 13 19:14:27 CET 2014


On 02/13/2014 07:02 AM, d r wrote:
> Hi there
>
> I am looking for a way to reorder a GRanges object using its metadata.
> Here is a sample of my GRanges object:
>
> GRanges with 1122060 ranges and 4 metadata columns:
>              seqnames               ranges strand   |
>                               ID       TSS
>                 <Rle>            <IRanges>  <Rle>   |
>                      <character> <integer>
>          [1]     chr1 [66993729, 66993928]      +   |
> chr1:66998729-66999824 chr1:66999824-66999824 +         1
>          [2]     chr1 [66993929, 66994128]      +   |
> chr1:66998729-66999824 chr1:66999824-66999824 +         1
>          [3]     chr1 [66994129, 66994328]      +   |
> chr1:66998729-66999824 chr1:66999824-66999824 +         1
>          [4]     chr1 [66994329, 66994528]      +   |
> chr1:66998729-66999824 chr1:66999824-66999824 +         1
>          [5]     chr1 [66994529, 66994728]      +   |
> chr1:66998729-66999824 chr1:66999824-66999824 +         1
>          ...      ...                  ...    ... ...
>                              ...       ...
>    [1122056]    chr22 [51226318, 51226517]      +   |
> chr22:51221773-51222156 chr22:51222156-51222156 +     29143
>    [1122057]    chr22 [51226518, 51226717]      +   |
> chr22:51221773-51222156 chr22:51222156-51222156 +     29143
>    [1122058]    chr22 [51226718, 51226917]      +   |
> chr22:51221773-51222156 chr22:51222156-51222156 +     29143
>    [1122059]    chr22 [51226918, 51227117]      +   |
> chr22:51221773-51222156 chr22:51222156-51222156 +     29143
>    [1122060]    chr22 [51227118, 51227317]      +   |
> chr22:51221773-51222156 chr22:51222156-51222156 +     29143
>
> I want to order it so the ranges will be sorted first by the ID
> metadata,then by start (ranges with the same value for this metadata
> are all subsets of a larger range, so they are on the same
> chromosome).
>
> I have implemented that coercing the GRanges into a data frame,
> ordering its row and then coercing back to GRanges:
>
> grdf<-as.data.frame(CPGIs)
> grdf<-grdf[order(grdf$ID,grdf$start),]
> CPGIs<-GRanges(seqnames=grdf$seqnames, ranges=IRanges(grdf$start,
> grdf$end),strand=grdf$strand, ID=grdf$ID, TSS=grdf$TSS,
>   HGNC_symbol=grdf$HGNC_symbol, refseq_symbol=grdf$refseq_symbol)

I think you're looking for

     o = order(CPGIs$ID, start(CBGIs))
     CBGIs[o]

?

Martin

>
>
> Which works, but is somewhat cumbersome. Is there a way to reorder the
> Granges object without resorting to a data frame?
>
> Thanks in advance
>
> Dolev Rahat
>
> 	[[alternative HTML version deleted]]
>
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at r-project.org
> https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
>


-- 
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793



More information about the Bioconductor mailing list