Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I convert Ensembl ID to gene symbol in R?

Tags:

I have a data.frame containing Ensembl IDs in one column; I would like to find corresponding gene symbols for the values of that column and add them to a new column in my data frame. I used bioMaRt but It couldn't find any of the Ensembl IDs!

Here is my sample data (df[1:2,]):

row.names organism    gene 41  Homo-Sapiens ENSP00000335357 115 Homo-Sapiens ENSP00000227378 

and I want to get something like this

row.names organism    gene         id 41  Homo-Sapiens ENSP00000335357   CDKN3 115 Homo-Sapiens ENSP00000227378   HSPA8 

and here is my code:

library('biomaRt') mart <- useDataset("hsapiens_gene_ensembl", useMart("ensembl")) genes <- df$genes df$id <- NA G_list <- getBM(filters= "ensembl_gene_id", attributes= c("ensembl_gene_id", "entrezgene", "description"),values=genes,mart= mart) 

Then I get this when I check the G_list

[1] ensembl_gene_id entrezgene      description  <0 rows> (or 0-length row.names) 

So I couldn't add G_list to my df! because there is nothing to add!

Thanks in Advance,

like image 714
user3576287 Avatar asked Feb 16 '15 14:02

user3576287


People also ask

How do I get my gene ID from Ensembl?

Click "Filters" (left menu) and expand GENE. Choose "Ensembl Transcript ID(s)" and paste your ID(s) or upload a file of IDs. Click "Attributes" (left menu) and expand GENE. Check Ensembl Gene ID, Transcript ID and Protein ID.

Do Ensembl gene IDs change?

A gene ID can change if the gene structure changes dramatically, for example if a gene is split into two, or alternatively, two genes are merged into one. If you have a list of IDs, submit them to our ID History converter. Click on the 'Tools' link at the top of most Ensembl pages, and follow the link to the converter.


2 Answers

This is because the values you have in your gene column are not gene ids, they are peptide id (they start with ENSP). To get the info you need, try replacing ensembl_gene_id by ensembl_peptide_id:

G_list <- getBM(filters = "ensembl_peptide_id",                  attributes = c("ensembl_peptide_id", "entrezgene", "description"),                 values = genes, mart = mart) 

Also, what you are really looking for is the hgnc_symbol

Here is the total code to get your output:

library('biomaRt') mart <- useDataset("hsapiens_gene_ensembl", useMart("ensembl")) genes <- df$genes df<-df[,-4] G_list <- getBM(filters= "ensembl_peptide_id", attributes= c("ensembl_peptide_id","hgnc_symbol"),values=genes,mart= mart) merge(df,G_list,by.x="gene",by.y="ensembl_peptide_id") 
like image 54
NicE Avatar answered Sep 17 '22 16:09

NicE


I tried several R packages (mygene, org.Hs.eg.db, biomaRt, EnsDb.Hsapiens.v79) to convert Ensembl.gene to gene.symbol, and found that the EnsDb.Hsapiens.v79 package / gene database provides the best conversion quality (in terms of being able to convert most of Ensembl.gene to gene.symbol).

Install the package if you have not installed by running this command: BiocManager::install("EnsDb.Hsapiens.v79")

library(EnsDb.Hsapiens.v79)  # 1. Convert from ensembl.gene to gene.symbol ensembl.genes <- c("ENSG00000150676", "ENSG00000099308", "ENSG00000142676", "ENSG00000180776", "ENSG00000108848", "ENSG00000277370", "ENSG00000103811", "ENSG00000101473")  geneIDs1 <- ensembldb::select(EnsDb.Hsapiens.v79, keys= ensembl.genes, keytype = "GENEID", columns = c("SYMBOL","GENEID"))  # 2. Convert from gene.symbol to ensembl.gene geneSymbols <-  c('DDX26B','CCDC83',  'MAST3', 'RPL11', 'ZDHHC20',  'LUC7L3',  'SNORD49A',  'CTSH', 'ACOT8')  geneIDs2 <- ensembldb::select(EnsDb.Hsapiens.v79, keys= geneSymbols, keytype = "SYMBOL", columns = c("SYMBOL","GENEID")) 

Other available R packages / gene database for the conversion can refer to this GitHub page.

My answer to similar question in bioinformatics.stackexchange.

like image 36
Good Will Avatar answered Sep 21 '22 16:09

Good Will