Accessibility Tools

- Le blog participatif de bioinformatique francophone depuis 2012 -

R : Convertir des Ensembl IDs en symboles de gènes

Lorsque l'on traite des don­nées de RNA-seq, il arrive très sou­vent de se retrou­ver avec une matrice de quan­ti­fi­ca­tion de l'expression des gènes (un tableau avec le nombre de reads par gène) dont le nom des gènes est repré­sen­té par leur iden­ti­fiant (ou ID) de chez Ensem­bl (ex. : "ENSG00000128573") et non par leurs sym­boles (ex. : "Foxp2", le gène de la parole).

Afin de don­ner du sens à nos résul­tats et faire de belles figures pour les publi­ca­tions, nous devons trans­for­mer les IDs en sym­boles de gènes.

Il y a 2 façons de faire :

  • en amont : il est pos­sible de modi­fier le fichier GTF (ou GFF) de l'annotation du génome pour rem­pla­cer les IDs par les sym­boles des gènes. Ain­si, la matrice de comp­tage d'expression contien­dra direc­te­ment les sym­boles au lieu des IDs et vous n'aurez pas à chan­ger vos matrices après le map­ping et la quan­ti­fi­ca­tion.
  • en aval : en consti­tuant une table de cor­res­pon­dance ID — sym­bole et en rem­pla­çant les IDs dans la matrice de comp­tage.

C'est cette der­nière solu­tion que je vais vous mon­trer.

Convertir les IDs en symboles

Pre­nons l'exemple de la matrice de comp­tage du nombre de reads par gène pro­ve­nant du trai­te­ment de don­nées RNA-seq via le pipe­line nf-core/r­na­seq. Les don­nées ont été map­pées sur le génome de réfé­rence de la sou­ris télé­char­gé depuis Gen­code.

Voi­ci à quoi res­semble cette matrice à la sor­tie du pipe­line nf-core :

gene_​idtranscript_id(s)Sample1Sample2Sample3
ENSMUSG00000000001.4ENSMUST00000000001.4663773925200
ENSMUSG00000000003.15ENSMUST00000000003.13,ENSMUST00000114041.2000
ENSMUSG00000000088.7ENSMUST00000000090.7,ENSMUST00000213678.1,ENSMUST00000214154.12302.553752.861961.77
ENSMUSG00000000094.12ENSMUST00000000096.11,ENSMUST00000108045.2,ENSMUST00000108047.71114
Ver­sion tron­quée d'une matrice de quan­ti­fi­ca­tion du nombre de reads par gène issue du pipe­line nf-core/r­na­seq.

Les deux pre­mières colonnes contiennent les IDs des gènes ("gene_​id"), et les IDs des trans­crits alter­na­tifs de cha­cun des gènes ("transcript_id(s)"). Les colonnes sui­vantes décrivent le nombre de reads par gène pour cha­cun des échan­tillons.

Pour conver­tir les IDs, nous aurons besoin de char­ger la librai­rie R conte­nant l'annotation du génome de la sou­ris dis­po­nible sur Bio­con­duc­tor :

Ensuite, nous allons ouvrir notre tableau d'expression, enle­ver la colonne qui concerne les trans­crits alter­na­tifs parce qu'elle ne nous inté­resse pas, puis extraire les IDs des gènes conte­nus dans notre tableau d'expression qui se trouvent dans la colonne "gene_​id" :

Vous remar­que­rez que les IDs ensemble se ter­minent par un point sui­vi d'un chiffre (ex. : "ENSMUSG00000000001.4"). Il s'agit du numé­ro de la ver­sion de l'annotation des gènes. Ce numé­ro est absent de l'annotation conte­nue dans le paquet "org.Mm.eg.db" que nous avons ins­tal­lé, il va donc fal­loir le reti­rer :

Enfin, nous allons récu­pé­rer les sym­boles des gènes grâce à la fonc­tion mapIds() du paquet "org.Mm.eg.db" :

On obtient alors un tableau avec les IDs des gènes en nom de ligne, et les sym­boles cor­res­pon­dant dans la pre­mière colonne :

On va ensuite rem­pla­cer les IDs des gènes par les sym­boles dans la matrice de comp­tage en uti­li­sant la fonc­tion merge(), qui per­met de s'assurer une par­faite cor­res­pon­dance entre les noms de lignes des deux tableaux :

Voi­là ce que l'on obtient à l'issue du merge effec­tué sur les noms de lignes :

Enfin, on va enle­ver les colonnes non néces­saires, éli­mi­ner les lignes en double (ça arrive de temps en temps avec la fonc­tion merge()…), et ren­sei­gner les sym­boles des gènes en noms de ligne.

Voi­là, vous avez main­te­nant une matrice direc­te­ment uti­li­sable pour faire votre ana­lyse d'expression dif­fé­ren­tielle !

Conclusion

Il existe pro­ba­ble­ment d'autre façon de faire, peut-être même plus effi­caces, je vous ai pré­sen­té ici celle que j'utilise.

Si vous sou­hai­tez conver­tir une liste d'IDs de gènes sans for­cé­ment pas­ser par R, vous pou­vez éga­le­ment uti­li­ser des outils de conver­sion dis­po­nibles sur divers sites inter­net, tels que David, g:profiler et BioMart/​MartView pour ne citer qu'eux.

Mer­ci à Ista, Gwe­naelle et Aze­rin pour la relec­ture.

Vous avez aimé ? Dites-le nous !

Moyenne : 0 /​ 5. Nb de votes : 0

Pas encore de vote pour cet article.

Partagez cet article



Pour continuer la lecture :


Commentaires

Une réponse à “R : Convertir des Ensembl IDs en symboles de gènes”

  1. Mer­ci ZaZo0o pour le billet bien utile !
    Trois petits ajouts :

    je pré­fère ne rem­pla­cer les ID par des Sym­bol qu'au der­nier moment, lors des plots. Il peut en effet arri­ver que des gène n'aient pas de Sym­bol, voir même d'avoir deux gene ID ayant le même Sym­bol ! Ca peut créer quelques sou­cis si le swap est fait trop en amont. On peut d’ailleurs aus­si tout gar­der en méta­don­nées de lignes graces aux objets {Sum­ma­ri­ze­dEx­pe­riment} qui ne sont fina­le­ment pas si com­pli­qué que ça à uti­li­ser.
    Pour cer­tains orga­nismes, il n’y a pas de package {org.Xx.eg.db} sur Bio­con­duc­tor. Dans ces cas là, on peut impor­ter le gtf dans R, il y a sou­vent une colonne Sym­bol dans le gtf.

    sub semble un peu plus rapide que sap­ply + strs­plit dans ce cadre là.

Laisser un commentaire

Pour insérer du code dans vos commentaires, utilisez les balises <code> et <\code>.