R言語でGTFファイルを読むための最良の方法



Best Way Read Gtf Files R Language



ダウンロードしたTCGAデータはコメント解除されています。アンサンブルからGTFファイルをダウンロードする必要があります。次に、GTFファイルをRに読み込む必要があります。

最初のメソッドrtracklayer :: import

source('https://bioconductor.org/biocLite.R') biocLite('rtracklayer') biocLite('SummarizedExperiment') gtf1 <- rtracklayer::import('Homo_sapiens.GRCh38.90.chr.gtf') gtf_df <- as.data.frame(gtf1)

最後に27の変数、2612129の観測値を読み取り、表示が良好であることをテストします



test <- gtf_df[1:5,] View(test)

新しいデータフレームになるために必要なgene_id、gene_biotype、gene_nameを取り出します

geneid_df <- dplyr::select(gtf_df,c(gene_name,gene_id,gene_biotype))

2番目のメソッドread.table

gtf2 <- read.table('Homo_sapiens.GRCh38.90.chr.gtf', header = FALSE, sep = ' ')

最後に、速度が非常に遅いことがわかりました。YUncleの投稿への参照をキャンセルしてパラメーターを増やし、正常に読み取り、1分かかり、9つの変数を読み取ります。
GTFに基づいて複数のトランスクリプト構造を描画する



gtf2 <- read.table('Homo_sapiens.GRCh38.90.chr.gtf', stringsAsFactors = F, header = FALSE, sep = ' ',comment = '#') test2 <- gtf2[1:5,]

リーダーパッケージの3番目のメソッドread_table2

非常に高速で、プログレスバーがあり、18個の変数を読み取りますが、ほとんどのgene_biotypeの表示が間違っています

gtf3 <- readr::read_table2('Homo_sapiens.GRCh38.90.chr.gtf',comment = '#') Gtf_df3 <- as.data.frame(gtf3) #convert to data.frame test3 <- gtf_df3[1:5,] View(test3)

4番目のメソッドread.table、fread

読み込まれるデータはread.tableと同じです。

library(data.table) genes <- fread('Homo_sapiens.GRCh38.90.chr.gtf') test4<- genes[1:5,] View(test4)

最後のステップは12秒かかりました、速度は非常に速いです、それを読んだ直後、名前はありません、あなたはそれを自分で追加する必要があります。
read.tableと同じように、9つの変数を読み取ります



setnames(genes, names(genes), c('chr','source','type','start','end','score','strand','phase','attributes') )

オプションのステップ、タイプには転写産物と遺伝子、選択遺伝子、および他の多くの転写産物があります

genes <- genes[type == 'gene']

私が欲しい情報は属性で大まかなものです、コンストラクターは抽出します

extract_attributes <- function(gtf_attributes, att_of_interest){ att <- strsplit(gtf_attributes,' ') att <- gsub(''','',unlist(att)) if(!is.null(unlist(strsplit(att[grep(att_of_interest, att)], ' ')))){ return( unlist(strsplit(att[grep(att_of_interest, att)], ' '))[2]) }else{ return(NA)} }

たとえば、私たちに参加するには、gene_idが必要です

gtf_attributes <- genes[1,9] att <- strsplit(gtf_attributes,' ')

この手順では、9列目の最初の行で、後でわかる文字以外の引数を指定します。2つの形式は異なる形式を返します。

genes[1,9] #data.frame genes$attributes[1] #character

そして、strsplitオブジェクトはキャラクターです、戻ってきてください

gtf_attributes <- genes$attributes[1] att <- strsplit(gtf_attributes,' ') att <- gsub(''','',unlist(att))

Grepは場所を取得し、分離後にコンテンツを取得します。2番目の要素は必要な要素です。

unlist(strsplit(att[grep('gene_id', att)], ' '))[2]

関数を使用して遺伝子のリストを取得します

genes$gene_id <- unlist(lapply(genes$attributes, extract_attributes, 'gene_id'))

最初のメソッドであるrtracklayer :: importを使用することを選択した場合、これらのことを行う必要はありません。 ! !