0. 数据准备(加载自己需要转换的数据)
Data <- read.table("GSE197543/GSE197543_UMIsMatrix.txt", header = T)
head(row.names(Data))
## [1] "ENSG00000225972" "ENSG00000225630" "ENSG00000237973" "ENSG00000248527" "ENSG00000237491" "ENSG00000228794"
1. 使用其他R包"AnnotationDbi"和"org.Hs.eg.db"
# 加载需要的包
library(AnnotationDbi)
library(org.Hs.eg.db)
# 进行转换
gene_symbols <- select(org.Hs.eg.db, keys = row.names(Data), columns = "SYMBOL", keytype = "ENSEMBL")
## 'select()' returned 1:many mapping between keys and columns
ꔷ 发现存在一个ENSG(Ensembl基因ID)可能对应多个基因符号(gene symbols),这通常是由于以下几个原因:
1)基因的异构体:同一基因可能产生多个转录本,每个转录本有不同的基因符号
2)基因重命名:基因符号可能会随时间的推移而变化,特别是在注释版本更新时
3)基因家族:某些基因可能属于同一基因家族,导致多个基因符号被标记为相同的ENSG
# 计算每个值的频次
freq_table <- table(gene_symbols$ENSEMBL)
# 提取频次大于1的值
duplicate_values <- names(freq_table[freq_table > 1])
# 取出重复行
duplicates <- gene_symbols[gene_symbols$ENSEMBL %in% duplicate_values, ]
ENSG-1
2. 从Ensembl下载GTF文件自行转换
2.1 GTF文件的下载(网页端或服务器端)
1)打开浏览器,访问 Ensembl数据库. 选择物种:Human
2)在物种页面,找到"Gene annotation"版面,通常在页面的右侧,点击Download GTF or GFF3
3)在下载页面,查找"GTF"格式的文件,选择最新版本下载。这里下载"Homo_sapiens.GRCh38.113.gtf.gz"
# 也可在服务器端直接进行下载
$ wget https://ftp.ensembl.org/pub/release-113/gtf/homo_sapiens/Homo_sapiens.GRCh38.113.gtf.gz
2.2 数据的提取及整合
# 加载需要的包
library(rtracklayer)
# 读取GTF文件
gtf_data <- import("/data/shumin/GBM/GSE197543/Homo_sapiens.GRCh38.113.gtf.gz")
# 查看数据结构
head(gtf_data)
## GRanges object with 6 ranges and 22 metadata columns:
## seqnames ranges strand | source type score phase gene_id gene_version gene_name gene_source gene_biotype transcript_id transcript_version transcript_name transcript_source transcript_biotype
## <Rle> <IRanges> <Rle> | <factor> <factor> <numeric> <integer> <character> <character> <character> <character> <character> <character> <character> <character> <character> <character>
## [1] 1 3069168-3438621 + | ensembl_havana gene NA <NA> ENSG00000142611 17 PRDM16 ensembl_havana protein_coding <NA> <NA> <NA> <NA> <NA>
## [2] 1 3069168-3434342 + | havana transcript NA <NA> ENSG00000142611 17 PRDM16 ensembl_havana protein_coding ENST00000511072 5 PRDM16-206 havana protein_coding
## [3] 1 3069168-3069296 + | havana exon NA <NA> ENSG00000142611 17 PRDM16 ensembl_havana protein_coding ENST00000511072 5 PRDM16-206 havana protein_coding
## [4] 1 3069260-3069296 + | havana CDS NA 0 ENSG00000142611 17 PRDM16 ensembl_havana protein_coding ENST00000511072 5 PRDM16-206 havana protein_coding
## [5] 1 3069260-3069262 + | havana start_codon NA 0 ENSG00000142611 17 PRDM16 ensembl_havana protein_coding ENST00000511072 5 PRDM16-206 havana protein_coding
## [6] 1 3186125-3186474 + | havana exon NA <NA> ENSG00000142611 17 PRDM16 ensembl_havana protein_coding ENST00000511072 5 PRDM16-206 havana protein_coding
## tag transcript_support_level exon_number exon_id exon_version protein_id protein_version ccds_id
## <character> <character> <character> <character> <character> <character> <character> <character>
## [1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## [2] gencode_primary 5 <NA> <NA> <NA> <NA> <NA> <NA>
## [3] gencode_primary 5 1 ENSE00002048533 1 <NA> <NA> <NA>
## [4] gencode_primary 5 1 <NA> <NA> ENSP00000426975 1 <NA>
## [5] gencode_primary 5 1 <NA> <NA> <NA> <NA> <NA>
## [6] gencode_primary 5 2 ENSE00001754112 1 <NA> <NA> <NA>
## -------
## seqinfo: 70 sequences from an unspecified genome; no seqlengths
# 提取ENSG ID和基因符号
gene_info <- data.frame(
ensembl_gene_id = gtf_data$gene_id,
gene_symbol = gtf_data$gene_name
)
# 去重(如果有重复项)
gene_info <- unique(gene_info)
# 查看结果
head(gene_info)
## ensembl_gene_id gene_symbol
## 1 ENSG00000142611 PRDM16
## 221 ENSG00000284616 <NA>
## 227 ENSG00000157911 PEX10
## 347 ENSG00000260972 <NA>
## 350 ENSG00000224340 RPL21P21
## 353 ENSG00000229280 EEF1DP6
ꔷ 发现存在多个ENSG(Ensembl基因ID)可能对应一个基因符号(gene symbols),猜测原因:
1)基因重叠和融合:一些基因在基因组上可能会相互重叠,或者通过基因融合事件而形成新的基因。在这种情况下,新的基因可能会共享相同的基因符号。
2)转录本的多样性:基因可以产生多个转录本,这些转录本可能在功能上有不同的角色。尽管它们共享相同的基因符号,但在不同的情况下可能会被分配到不同的ENSG ID。
3)基因家族:某些基因可能属于同一基因家族,可能共享相同的基因符号。
# 计算每个值的频次
freq_table_2 <- table(gene_info$SYMBOL)
# 提取频次大于1的值
duplicate_values_2 <- names(freq_table_2[freq_table_2 > 1])
# 取出重复行
duplicates_2 <- gene_info[gene_info$SYMBOL %in% duplicate_values_2, ]
ENSG-2