반응형

Gene id conversion in R




R에서 gene id로부터 다른형식의 geneid 값을 가져오는 방법에 대해서 설명하고자 한다.

예시는 human의 ensembl geneid를 입력값으로 받아 hgnc_symbol로 바꾸는 것이지만 종을 다르게 하거나 hgnc_symbol이 아닌 다른 정보도 얼마든지 가져올 수 있다.

users guide 주소 :


library(biomaRt)

mart <- useDataset("hsapiens_gene_ensembl", useMart("ensembl"))
G_list <- getBM(filters= "ensembl_gene_id", attributes= c("ensembl_gene_id","hgnc_symbol"),values=df$Geneid,mart= mart)

위의 코드는 df$Geneid에 ensembl geneid가 있는 상태에서 매칭되는 hgnc_symbol을 가져와 g_list에 저장한 것이다. 

useDataset에서 "hsapiens"를 다른 종으로 바꿀 수 있으며

getBM에서 attributes를 hgnc_symbol이 아니라 다른정보 (enterzgene, refseq_mrna, interpro, interpro_description 등)으로 바꾸면 해당 정보를 가져올 수 있다. 


물론 아래처럼 사용하여 동시에 가져올 수도 있다.


ipro = getBM(attributes=c("refseq_mrna","interpro","interpro_description"), filters="refseq_mrna", values=refseqids, mart=mart)


## refseq_mrna interpro interpro_description ## 1 NM_000546 IPR002117    p53 tumour suppressor family ## 2 NM_000546 IPR008967    p53-like transcription factor, DNA-binding ## 3 NM_000546 IPR010991    p53, tetramerisation domain ## 4 NM_000546 IPR011615    p53, DNA-binding domain ## 5 NM_000546 IPR012346    p53/RUNT-type transcription factor, DNA-binding domain superfamily


어떤 정보를 가져올 수 있는지는 위의 users guide를 참조하기 바란다.

listAttributes(mart)를 입력하면 사용한 데이터셋에 대한 가능한 attributes가 나온다.


> head(listAttributes(mart),10)

                            name                  description         page

1                ensembl_gene_id               Gene stable ID feature_page

2        ensembl_gene_id_version       Gene stable ID version feature_page

3          ensembl_transcript_id         Transcript stable ID feature_page

4  ensembl_transcript_id_version Transcript stable ID version feature_page

5             ensembl_peptide_id            Protein stable ID feature_page

6     ensembl_peptide_id_version    Protein stable ID version feature_page

7                ensembl_exon_id               Exon stable ID feature_page

8                    description             Gene description feature_page

9                chromosome_name     Chromosome/scaffold name feature_page

10                start_position              Gene start (bp) feature_page



G_list에 해당 정보를 담았다면 이를 기존의 df와 합치는 과정이 필요하다. 



1. df$Geneid와 G_list$ensembl_gene_id의 값이 같을 때 두 data frame을 합치는 방식이다.


원래는 이 방법을 사용하고 있었으나 ensembl_gene_id가 위의 데이터 베이스에 없을 때 결과 df의 사이즈가 입력할 때와 달라지는 것을 확인하여 2번의 방법을 사용하는 것을 추천한다.


df <- merge(df,G_list,by.x="Geneid",by.y="ensembl_gene_id")



2. df에 hgnc_symbol 열을 미리 만들고 내용은 공란으로 채워넣는다. 공란으로 채우는 이유는 ensembl gene id가 데이터 베이스 없거나 또는 ensembl gene id는 있지만 여기에 매칭되는 hgnc symbol이 없어도 행을 유지시키기 위함이다.


아래의 코드를 사용하면 df$Geneid와 G_list$ensembl_gene_id가 매칭될 때 G_list$hgnc_symbol의 값을 df$hgnc_symbol에  넣는 다는 의미이다.


df$hgnc_symbol = ""
df["hgnc_symbol"] = lapply("hgnc_symbol", function(x) G_list[[x]][match(df$Geneid, G_list$ensembl_gene_id)])

df$hgnc_symbol을 확인해보면 값이 없는 부분은 공란으로 남아있고 match된 부분은 모두 ensembl gene id에 대응하는hgnc_symbol값이 들어 있을 것이다.


Reference -

https://www.bioconductor.org/packages/devel/bioc/vignettes/biomaRt/inst/doc/biomaRt.html




반응형

+ Recent posts