【问题标题】:Query genes within regions查询区域内的基因
【发布时间】:2018-10-12 15:49:04
【问题描述】:

我想检索存在于一系列区域中的基因。比如说,我有一个带有查询位置的床文件,例如:

1     2665697     4665777      MIR201
1    10391435    12391516      MIR500
1    15106831    17106911      MIR122
1    23436535    25436616      MIR234 
1    23436575    25436656      MIR488

我想获得属于这些区域的基因。

我试过使用biomaRt,和bedtools相交,但是我得到的输出,是一个对应所有区域的基因列表,不是一个一个的,如我想要得到的期望输出是每一行中的基因,但是在单独的行中,如果我一次只做一个查询区域。基本上我想知道哪些基因属于每个区域,但仍然能够识别哪些基因属于哪些区域。

我正在做的是,从一个检测到的 miRNA 的区域,我向上和向下扩展基因组区域,以便从这个 miRNA 中获取相邻的基因。我正在上下使用 100 万个碱基窗口。这仅适用于一个查询,但是,如何使用 biomaRt 进行许多查询或与 bedtools 进行许多交集,所以我有点像:

1     2665697     4665777      MIR201      GENEX, GENEY, GENEZ...
1    10391435    12391516      MIR500      GENEA, GENEB, GENEC...
1    15106831    17106911      MIR122
1    23436535    25436616      MIR234 
1    23436575    25436656      MIR488

表示 GENEX、GENEY 和 GENEZ 位于 1:2665697-4665777 之内,MIR201 位于中间,因为该区域的计算方法是减去 100 万 bp 到 sart,并增加 100 万 bp 到结束位置。

我在某种程度上确定了每个 miRNA 的相邻基因,以便在物种内进行比较,但我不知道如何使用 biomaRtbedtools 单独查询多个区域。

有什么帮助吗?

【问题讨论】:

    标签: r bioinformatics bioconductor biomart


    【解决方案1】:

    您可以尝试biomart & tidyverse 解决方案

    library(biomaRt)
    library(tidyverse)
    # specify the database
    ensembl = useMart("ensembl",dataset="hsapiens_gene_ensembl")
    
    # queries per row
    res <- d %>% 
      split(1:nrow(.)) %>% 
      map(~getBM(attributes=c("external_gene_name", "chromosome_name", "start_position", "end_position"), 
                 filters = c("chromosome_name" , "start", "end"), 
                 values = list(.$V1, .$V2, .$V3), 
                 mart = ensembl))
    
    
    # plot the results for the first element to check the overlapping genes
    plot(data.frame(unlist(d[1, 2:3]), nrow(res$`1`)), type="l", col=2, lwd =3,
         ylim = c(0, nrow(res$`1`)),
         xlim=unlist(d[1, 2:3])+c(-100000,100000))
    res$`1` %>% 
      gather(k,v,-external_gene_name,-chromosome_name) %>% 
      arrange(external_gene_name) %>% 
      mutate(n=rep(1:(n()/2),each=2)) %>% 
      split(.$n) %>% 
      map(~with(.,lines(cbind(v, n), type="l", lwd =3)))
    

    # transform the data in your expected data.frame
    res %>% 
      map(~transmute(.,new=paste(external_gene_name, collapse="," )) %>% 
            slice(1)) %>% 
      bind_rows() %>% 
      bind_cols(d,.) %>% 
      as.tibble()
    # A tibble: 5 x 5
         V1       V2       V3    V4    new                                                                                                               
      <int>    <int>    <int> <fct>  <chr>                                                                                                             
    1     1  2665697  4665777 MIR201 TTC34,AC242022.1,AL592464.2,AL592464.1,AL589702.1,ACTRT2,LINC00982,PRDM16,MIR4251,AL008733.1,AL512383.1,AL590438.~
    2     1 10391435 12391516 MIR500 AL139424.2,PGD,AL139424.1,CENPS-CORT,CENPS,CORT,DFFA,AL354956.1,PEX14,RN7SL614P,CASZ1,AL139423.1,HSPE1P24,C1orf12~
    3     1 15106831 17106911 MIR122 KAZN,TMEM51-AS1,TMEM51,C1orf195,AL035405.1,AL391094.1,FHAD1,AL031283.2,AL031283.3,AL031283.1,EFHD2,CTRC,CELA2A,CE~
    4     1 23436535 25436616 MIR234 ASAP3,E2F2,AL021154.1,ID3,MDS2,AL451000.1,RPL11,ELOA,ELOA-AS1,PITHD1,LYPLA2,GALE,HMGCL,FUCA1,CNR2,BTBD6P1,AL59060~
    5     1 23436575 25436656 MIR488 ASAP3,E2F2,AL021154.1,ID3,MDS2,AL451000.1,RPL11,ELOA,ELOA-AS1,PITHD1,LYPLA2,GALE,HMGCL,FUCA1,CNR2,BTBD6P1,AL59060~
    

    如果您需要所有数据,您也可以尝试purrr 解决方案。优点:biomart输出存储在列表中,不会丢失。

    d %>% 
      nest(-V4) %>% 
      mutate(biomart=map(data, ~getBM(attributes=c("external_gene_name", "chromosome_name", "start_position", "end_position"), 
                 filters = c("chromosome_name" , "start", "end"), 
                 values = list(.$V1, .$V2, .$V3), 
                 mart = ensembl)),  
               Genes = map(biomart, ~paste(.$external_gene_name, collapse = ","))) %>% 
      unnest(Genes, data)
    # A tibble: 5 x 6
      V4     biomart                Genes                                                         V1     V2     V3
      <fct>  <list>                 <chr>                                                      <int>  <int>  <int>
    1 MIR201 <data.frame [43 x 4]>  TTC34,AC242022.1,AL592464.2,AL592464.1,AL589702.1,ACTRT2,~     1 2.67e6 4.67e6
    2 MIR500 <data.frame [72 x 4]>  AL139424.2,PGD,AL139424.1,CENPS-CORT,CENPS,CORT,DFFA,AL35~     1 1.04e7 1.24e7
    3 MIR122 <data.frame [101 x 4]> KAZN,TMEM51-AS1,TMEM51,C1orf195,AL035405.1,AL391094.1,FHA~     1 1.51e7 1.71e7
    4 MIR234 <data.frame [62 x 4]>  ASAP3,E2F2,AL021154.1,ID3,MDS2,AL451000.1,RPL11,ELOA,ELOA~     1 2.34e7 2.54e7
    5 MIR488 <data.frame [62 x 4]>  ASAP3,E2F2,AL021154.1,ID3,MDS2,AL451000.1,RPL11,ELOA,ELOA~     1 2.34e7 2.54e7
    

    【讨论】:

      【解决方案2】:

      @Jimbou 相同的方法,但没有 tidyverse

      library(biomaRt)
      
      # data
      d <- read.table(text = "1     2665697     4665777      MIR201
      1    10391435    12391516      MIR500
      1    15106831    17106911      MIR122
      1    23436535    25436616      MIR234 
      1    23436575    25436656      MIR488")
      
      # specify the database
      ensembl = useMart("ensembl", dataset = "hsapiens_gene_ensembl")
      
      # loop through rows, get genes, then paste with collapse,
      # and finally bind back with data d.
      res <- cbind(
        d,
        genes = apply(d, 1, function(i){
          x <- getBM(attributes=c("external_gene_name"), 
                     filters = c("chromosome_name" , "start", "end"), 
                     values = list(i[1], i[2], i[3]), 
                     mart = ensembl)
          # keeping only 3 genes, as output is too long.
          # In your case remove below line
          x <- head(x, 3)
      
          # return genes, comma separated
          paste(x$external_gene_name, collapse = ",")
        })
      )
      
      res
      #   V1       V2       V3     V4                       genes
      # 1  1  2665697  4665777 MIR201 TTC34,AC242022.1,AL592464.2
      # 2  1 10391435 12391516 MIR500   AL139424.2,PGD,AL139424.1
      # 3  1 15106831 17106911 MIR122      KAZN,TMEM51-AS1,TMEM51
      # 4  1 23436535 25436616 MIR234       ASAP3,E2F2,AL021154.1
      # 5  1 23436575 25436656 MIR488       ASAP3,E2F2,AL021154.1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 2013-10-06
        • 2013-04-26
        • 1970-01-01
        • 2020-08-17
        • 2017-04-22
        • 1970-01-01
        相关资源
        最近更新 更多