首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从GenomicRanges对象中获取不同/唯一行

如何从GenomicRanges对象中获取不同/唯一行
EN

Stack Overflow用户
提问于 2019-06-26 12:16:55
回答 2查看 222关注 0票数 0

我用下面的代码创建了以下GenomicRanges对象:

代码语言:javascript
运行
复制
library(GenomicRanges)
gr <- GRanges(seqnames = "chr1", strand = c("+", "-","-", "+"),ranges = IRanges(start = c(1,3,3,5), width = 3))
gr

它看起来像这样:

代码语言:javascript
运行
复制
GRanges object with 4 ranges and 0 metadata columns:
      seqnames    ranges strand
         <Rle> <IRanges>  <Rle>
  [1]     chr1       1-3      +
  [2]     chr1       3-5      -
  [3]     chr1       3-5      -
  [4]     chr1       5-7      +

我想要做的是从那里获得唯一的行,生成以下代码(手工编码)

代码语言:javascript
运行
复制
GRanges object with 3 ranges and 0 metadata columns:
      seqnames    ranges strand
         <Rle> <IRanges>  <Rle>
  [1]     chr1       1-3      +
  [2]     chr1       3-5      -
  [3]     chr1       5-7      +

我怎样才能做到这一点呢?实际上,我有大约900万行要处理。

我可以使用这种方法,但very2速度很慢:

代码语言:javascript
运行
复制
 library(tidyverse)
 gr %>% 
   as.tibble() %>% 
   distinct()
EN

回答 2

Stack Overflow用户

发布于 2019-06-27 16:54:51

您可以使用unique返回唯一行:

代码语言:javascript
运行
复制
library(GenomicRanges)

gr <- GRanges(seqnames = "chr1", strand = c("+", "-","-", "+"),ranges = IRanges(start = c(1,3,3,5), width = 3))
unique(gr)
#> GRanges object with 3 ranges and 0 metadata columns:
#>       seqnames    ranges strand
#>          <Rle> <IRanges>  <Rle>
#>   [1]     chr1       1-3      +
#>   [2]     chr1       3-5      -
#>   [3]     chr1       5-7      +
#>   -------
#>   seqinfo: 1 sequence from an unspecified genome; no seqlengths

如果您正在将对象转换为data.frame (就像在您的tidyverse解决方案中一样),那么data.table的unique可能会更快:

代码语言:javascript
运行
复制
library(data.table)

unique(as.data.table(gr))
#>    seqnames start end width strand
#> 1:     chr1     1   3     3      +
#> 2:     chr1     3   5     3      -
#> 3:     chr1     5   7     3      +
票数 1
EN

Stack Overflow用户

发布于 2019-06-26 12:28:47

您可以使用索引来执行此操作:

代码语言:javascript
运行
复制
gr[paste0(gr$seqnames, gr$ranges, gr$strand) %in% unique(paste0(gr$seqnames, gr$ranges, gr$strand)), ]

paste0(gr$seqnames, gr$ranges, gr$strand)将把行绑定到一个可识别的字符串中,表示变量的不同组合。然后,根据这些行是否唯一,使用%in%创建TRUE/FALSE的向量。如果不是,[] (索引)将删除它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56765100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档