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,
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.
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.
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")
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With