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

3

29

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!

Pelops answered 16/2, 2015 at 14:22 Comment(0)
B
29

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")
Burseraceous answered 16/2, 2015 at 14:57 Comment(2)
You forgot to switch the filters to ensembl_peptide_id as well.Ethanol
thanks, I switched the attributes instead of the filters,changed it nowBurseraceous
B
19

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.

Bambara answered 28/11, 2019 at 17:17 Comment(0)
P
2

I can recommend the R package gprofiler2 as in:

library(gprofiler2)

Define Ensembl IDs:

ensembl.genes <- c("ENSG00000150676", "ENSG00000099308", "ENSG00000142676", "ENSG00000180776", "ENSG00000108848", "ENSG00000277370", "ENSG00000103811", "ENSG00000101473")

Convert to gene symbols:

gene.symbols <- gconvert(ensembl.genes,organism="hsapiens",target="ENTREZGENE",filter_na = F)$target
Pothouse answered 11/1, 2023 at 22:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.