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を使用することを選択した場合、これらのことを行う必要はありません。 ! !