获取gtf文件gene symbol ENSID gene_biotype

首先下载gtf文件,这里我们引用的是Ensembl的文件enensembl gtf文件下载

在这里插入图片描述

这里面我们下载完文件后我们如何查看这个文件信息呢,首先我们用UEStudio 打开后我们看一下文件的数据结构
在这里插入图片描述
可以看到里面的我们想要的有gene_ID 和基因的名字 以及这个基因的biotype,我们明确想要提取的对象后导入我们的R中进行提取。

library(refGenome)
ens <- ensemblGenome()
read.gtf(ens, "Homo_sapiens.GRCh38.98.chr.gtf")###导入gtf文件 比较耗时
class(ens)
my_gene <- getGenePositions(ens)

**这里面不要用genecode的GTF文件导入会使R崩溃**

read.gtf(ens, “Homo_sapiens.GRCh38.98.chr.gtf”)
[read.gtf.refGenome] Reading file ‘Homo_sapiens.GRCh38.98.chr.gtf’.
[GTF] 2894598 lines processed.
[read.gtf.refGenome] Extracting genes table.
[read.gtf.refGenome] Found 60,564 gene records.
[read.gtf.refGenome] Finished.

colnames(my_gene)
 [1] "id"                       "seqid"                    "source"                   "start"                    "end"                     
 [6] "score"                    "strand"                   "frame"                    "ccds_id"                  "protein_version"         
[11] "protein_id"               "exon_version"             "transcript_support_level" "tag"                      "exon_number"             
[16] "gene_id"                  "transcript_name"          "gene_version"             "gene_name"                "gene_source"             
[21] "gene_biotype"             "transcript_id"            "transcript_source"        "exon_id"                  "transcript_version"      
[26] "transcript_biotype"

我们看一下有多少列 以及里面包含了什么,然后根据自己想要的类别提取,这里我提取的是gene_id 和gene_name,以及gene_biotype

gene_id<- my_gene[,16]
gene_name <- my_gene[,19]
gene_biotype <- my_gene[,21]
a <- cbind(gene_id,gene_name,gene_biotype)

到这里想看一下跟TCGA来比较一下基因的数目在这里插入图片描述
这个是TCGA的ID 为了跟ensembl的ID一致我们需要把TCGA的ID 后面的小数点后的删除
整成下面的样子

在这里插入图片描述
然后我们导入到R里面进行比较

b <- merge(rt, a, by = "gene_id")##合并通过gene ID
table(b)
'data.frame':	56549 obs. of  4 variables:
 $ gene_id                     : Factor w/ 60483 levels "ENSG00000000003",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ TCGA-E9-A1RF-11A-32R-A157-07: int  4544 1881 1565 1356 294 1006 24121 3695 5097 2025 ...
 $ gene_name                   : Factor w/ 59368 levels "5_8S_rRNA","5S_rRNA",..: 56530 55760 27407 51645 23684 29301 25128 29753 30068 41316 ...
 $ gene_biotype                : Factor w/ 40 levels "IG_C_gene","IG_C_pseudogene",..: 16 16 16 16 16 16 16 16 16 16 ...

看了一下TCGA的ID有60483 ,ensembl的ID有60564 合并一下有只有56549个少了4000多个

write.table(b,file="xxxl.txt",sep="\t",quote=F,row.names = T) ###保存一下
write.table(a,file="xxxxl.txt",sep="\t",quote=F,row.names = T) ###保存一下

保存下来看一下差异在哪,我看一下跟市面上脚本合并的差的不是很多同时我也提供了一个perl的脚本来进行转换

use strict;

my $gtfFile="Homo_sapiens.GRCh38.98.chr.gtf";
my $expFile="mRNAmatrix.txt";
my $outFile="symbol.txt";

my %hash=();
open(RF,"$gtfFile") or die $!;
while(my $line=<RF>)
{
	chomp($line);
	if($line=~/gene_id \"(.+?)\"\;.+gene_name "(.+?)"\;.+gene_biotype \"(.+?)\"\;/)
	{
		$hash{$1}=$2;
	}
}
close(RF);

open(RF,"$expFile") or die $!;
open(WF,">$outFile") or die $!;
while(my $line=<RF>)
{
	if($.==1)
	{
		print WF $line;
		next;
	}
	chomp($line);
	my @arr=split(/\t/,$line);
	$arr[0]=~s/(.+)\..+/$1/g;
	if(exists $hash{$arr[0]})
	{
		$arr[0]=$hash{$arr[0]};
		print WF join("\t",@arr) . "\n";
	}
}
close(WF); 
close(RF);

这个脚本转化的是有56639的基因,差了将近100个基因不知道为啥,没有进行细微的探究,有知道给给我的答案。

汇总前面的R代码

library(refGenome)
ens <- ensemblGenome()
read.gtf(ens, "Homo_sapiens.GRCh38.98.chr.gtf")###导入gtf文件 比较耗时
class(ens)
my_gene <- getGenePositions(ens)
colnames(my_gene)
gene_id<- my_gene[,16]
gene_name <- my_gene[,19]
gene_biotype <- my_gene[,21]
a <- cbind(gene_id,gene_name,gene_biotype)
rt=read.table("id.txt",sep="\t",header=T,check.names=F)           
b <- merge(rt, a, by = "gene_id")##合并通过gene ID
write.table(b,file="xxxl.txt",sep="\t",quote=F,row.names = T) ###保存一下
write.table(a,file="xxxxl.txt",sep="\t",quote=F,row.names = T) ###保存一下
发布了6 篇原创文章 · 获赞 0 · 访问量 553

猜你喜欢

转载自blog.csdn.net/sayhello1025/article/details/103478779