目的
たとえばEnsemblのGTFをつかってでてきたRNA-seqからのDEGのリストがあって、GOstatsなどでGO解析をしたいのでEntrez Gene ID (NCBI Gene ID; 以下EG)に変換したい。
準備
ヒトならBioconductorにあるorg.Hs.eg.db
をインストールしておく。
マウスならorg.Mm.eg.db
になる。
※ちなみに以下はR version 3.5.1 (2018-07-02)でやっています
例
library(org.Hs.eg.db)
ENSEMBL <- c( "ENSG00000162591","ENSG00000162745","ENSG00000178882","ENSG00000285347")
ENTREZ <- as.vector(unlist(as.list(org.Hs.egENSEMBL2EG)[ENSEMBL]))
EGが重複している可能性はあるので、ここではしていないけどsortしたりuniqueしたりしておくといいかも。
結果は以下のようにこうなっているはず。
# 実行例
> ENTREZ
[1] "1953" "25903" "144347" "100533183"
# ENSG0000017888 に相当するEGが2つでてきて、ENSG00000285347 に相当するEGが出てきていないことに注意
<注意>
- ENSG00000178882のように、リストのなかに2つ以上のEntrez Gene IDがある場合でも展開してくれるけど、かわりにそれぞれにnames属性があらたに作成される。
- ENSG00000285347のようにそもそもエントリがないものは、なにもなかったように扱われる。
as.vecter()をつけずに下記のようにつかっても元々vectorとして返ってくるけど、「ENSG00000178882」にはEGとして「144347」と「100533183」があるので、それぞれにuniqueなIDとして末尾に1と2が付加されて「ENSG00000178881」と「ENSG00000178882 」がnames属性としてついている。ので後々間違えやすいので、names(x) <- NULLなどをしてnamesを消しておくかas.vector()をかませておく。
# 実行例
> as.list(org.Hs.egENSEMBL2EG)["ENSG00000178882"]
$ENSG00000178882
[1] "144347" "100533183"
> as.list(org.Hs.egENSEMBL2EG)["ENSG00000285347"]
$<NA>
NULL
> unlist(as.list(org.Hs.egENSEMBL2EG)[TEST])
ENSG00000162591 ENSG00000162745 ENSG000001788821 ENSG000001788822
"1953" "25903" "144347" "100533183"
# ENSG0000017888 が2つでてきて、ENSG00000285347 がなくなっていることに注意
名前が2EG表記のデータであれば同様にできるので、org.Hs.egENSEMBL2EG
だけでなくorg.Hs.egSYMBOL2EG
, org.Hs.egREFSEQ2EG
, org.Hs.egENSEMBLTRANS2EG
, org.Hs.egENSEMBLPROT2EG
, org.Hs.egACCNUM2EG
, org.Hs.egOMIM2EG
などでもできる。
逆にもちろん応用すればEGからほかのIDの参照もできる。(org.Hs.egENSEMBL
やorg.Hs.egACCNUM
やorg.Hs.egSYMBOL
などなど)
使えそうなのは以下で調べてみる。
ls("package:org.Hs.eg.db")
# 実行例
> ls("package:org.Hs.eg.db")
[1] "org.Hs.eg" "org.Hs.eg_dbconn"
[3] "org.Hs.eg_dbfile" "org.Hs.eg_dbInfo"
[5] "org.Hs.eg_dbschema" "org.Hs.eg.db"
[7] "org.Hs.egACCNUM" "org.Hs.egACCNUM2EG"
[9] "org.Hs.egALIAS2EG" "org.Hs.egCHR"
[11] "org.Hs.egCHRLENGTHS" "org.Hs.egCHRLOC"
[13] "org.Hs.egCHRLOCEND" "org.Hs.egENSEMBL"
[15] "org.Hs.egENSEMBL2EG" "org.Hs.egENSEMBLPROT"
[17] "org.Hs.egENSEMBLPROT2EG" "org.Hs.egENSEMBLTRANS"
[19] "org.Hs.egENSEMBLTRANS2EG" "org.Hs.egENZYME"
[21] "org.Hs.egENZYME2EG" "org.Hs.egGENENAME"
[23] "org.Hs.egGO" "org.Hs.egGO2ALLEGS"
[25] "org.Hs.egGO2EG" "org.Hs.egMAP"
[27] "org.Hs.egMAP2EG" "org.Hs.egMAPCOUNTS"
[29] "org.Hs.egOMIM" "org.Hs.egOMIM2EG"
[31] "org.Hs.egORGANISM" "org.Hs.egPATH"
[33] "org.Hs.egPATH2EG" "org.Hs.egPFAM"
[35] "org.Hs.egPMID" "org.Hs.egPMID2EG"
[37] "org.Hs.egPROSITE" "org.Hs.egREFSEQ"
[39] "org.Hs.egREFSEQ2EG" "org.Hs.egSYMBOL"
[41] "org.Hs.egSYMBOL2EG" "org.Hs.egUCSCKG"
[43] "org.Hs.egUNIGENE" "org.Hs.egUNIGENE2EG"
[45] "org.Hs.egUNIPROT"
付記
この方法を覚えておくと、RNA-seqなり他のプラットフォームなりで解析したあと、GOstatsなどをつかってGO解析したいときに、それぞれで必要なbackgroundのIDセットも変わる筈なので、そういうbackgroundのIDセットを用意するときにも利用できる。
(具体的には単純にもともとのGTFに含まれているもののみをbackgroundにしないと、backgroundが大きすぎてFDRなどの多重検定の補正で過小評価されるのを避けたい)