首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >驴的单细胞数据基因ID如何转换?

驴的单细胞数据基因ID如何转换?

作者头像
生信技能树
发布2024-12-27 19:57:41
发布2024-12-27 19:57:41
2940
举报
文章被收录于专栏:生信技能树生信技能树

大部分人研究的物种都是人、大鼠、小鼠,最近我们的生信入门群里面有个小伙伴学习了单细胞后,开始做自己的课题,物种比较少见,是个驴子:donkey,遇到的一个问题是驴的基因ID转换。

驴的基因ID如下:

代码语言:javascript
复制
head(rownames(ct))
[1] "ENSEASG00005011113" "ENSEASG00005020859" "ENSEASG00005021205" "ENSEASG00005021266" "ENSEASG00005021268"
[6] "ENSEASG00005021261"

学习过我们《转录组测序分析专题》课程的人,肯定一眼就看出来了这个ID来自数据库:Ensembl数据库。

其特征如下:ENS开头+物种缩写+Feature+11位唯一的数字。

那么,我们就需要去这个数据库下载这个物种对应的gtf文件进行ID与Symbol关系提取,而这个小技巧也是我们《转录组测序分析专题》中重点讲过的知识点:

参考基因组注释文件介绍:

每一列的含义:

第九列的具体含义:

课上专门针对这个文件的练习:R版本

代码语言:javascript
复制
rm(list=ls())
## 使用西湖大学的 Bioconductor镜像
# options(BioC_mirror="https://mirrors.westlake.edu.cn/bioconductor")
# options("repos"=c(CRAN="https://mirrors.westlake.edu.cn/CRAN/"))
# BiocManager::install("rtracklayer")
# install.packages("tidyverse")
library(tidyverse)
library(rtracklayer)

# 读取gtf文件
gtf <- rtracklayer::import('data/Homo_sapiens.GRCh38.104.chr.gtf.gz') 
class(gtf)
str(gtf)
head(gtf)

# 转为数据框,简单探索
gtf_df <- as.data.frame(gtf)
table(gtf_df$type)
table(gtf_df$gene_biotype)
colnames(gtf_df)

# 过滤基因行
gtf_df <- filter(gtf_df, type=="gene")
head(gtf_df)
as.data.frame(table(gtf_df$gene_biotype))


# 提取 gene id与entrez id
id2name <- gtf_df[, c("gene_id", "gene_name", "gene_biotype")]
head(id2name) # 并不是所有的gene_id都有对应的gene_name

# 去重
id2name <- unique(id2name)
# 保存基因id对应关系
save(id2name, file = "data/id2name.Rdata")
write.table(id2name, file = "data/id2name.xls",row.names = F,sep = "\t",quote = F)


# 也可以提取编码蛋白基因
id2name_mrna <- filter(id2name, gene_biotype=="protein_coding")
head(id2name_mrna)
# 保存基因id对应关系
save(id2name_mrna, file = "data/id2name_mrna.Rdata")
write.table(id2name_mrna, file = "data/id2name_mrna.xls",row.names = F,sep = "\t",quote = F)

bash编程代码版本

代码语言:javascript
复制
zless -S /home/t_rna/database/GRCh38.104/Homo_sapiens.GRCh38.104.chr.gtf.gz | awk -F '\t' '{if($3=="gene") {print$9}}' | awk ' BEGIN{print "gene_id\tgene_name\tgene_biotype"} !/^#/{ \
 id = name = type = "NA";
 for (i=1;i<=NF;i++) { 
   if($i~"gene_id") id=$(i+1)
   if($i~"gene_name") name=$(i+1)
   if($i~"gene_biotype") type=$(i+1)
  }
  print id"\t"name"\t"type } ' | \
  sed 's/[\";]//g' > GRCh38.gene_info.txt

head GRCh38.gene_info.txt

现在到了该融汇贯通的时候了,我们上课讲解的是人这个物种,现在换为驴:

首先先去下载驴的gtf文件:

在这个页面搜索:donkey https://www.ensembl.org/info/about/species.html

进入:https://ftp.ensembl.org/pub/release-113/gtf/equus_asinus/

代码语言:javascript
复制
wget -c https://ftp.ensembl.org/pub/release-113/gtf/equus_asinus/Equus_asinus.ASM1607732v2.113.gtf.gz

提取基因ID与symbol对应关系:

代码语言:javascript
复制
## id 转换
library(tidyverse)
library(rtracklayer)

# 读取gtf文件
gtf <- rtracklayer::import('Equus_asinus.ASM1607732v2.113.gtf.gz') 
# 转为数据框,简单探索
gtf_df <- as.data.frame(gtf)
table(gtf_df$type)
table(gtf_df$gene_biotype)
colnames(gtf_df)

# 过滤基因行
gtf_df <- filter(gtf_df, type=="gene")
head(gtf_df)
as.data.frame(table(gtf_df$gene_biotype))

# 提取 gene id与entrez id
id2name <- gtf_df[, c("gene_id", "gene_name", "gene_biotype")]
id2name <- unique(id2name)
head(id2name) # 并不是所有的gene_id都有对应的gene_name
#id2name <- na.omit(id2name)
loc <- which(is.na(id2name$gene_name))
id2name[loc,2] <- id2name[loc,1]
head(id2name)

对应关系:这里的基因id有很多没有symbol,没有symbol的我使用gene_id进行了替补。

代码语言:javascript
复制
             gene_id          gene_name   gene_biotype
1 ENSEASG00005011113 ENSEASG00005011113 protein_coding
2 ENSEASG00005020859            SLC41A2 protein_coding
3 ENSEASG00005021205 ENSEASG00005021205 protein_coding
4 ENSEASG00005021266               MYF5 protein_coding
5 ENSEASG00005021268               MYF6 protein_coding
6 ENSEASG00005021261              ACSS3 protein_coding

读取单细包数据:

代码语言:javascript
复制
ct <- Read10X('data/',gene.column = 1)
dim(ct)
head(rownames(ct))

comid <- intersect(rownames(ct), id2name$gene_id)
ct_symbol <- ct[comid, ]
ct_symbol[1:4,1:5]
names <- id2name[match(comid, id2name$gene_id), ]
rownames(ct_symbol) <- names$gene_name

# 创建seurat对象
sce.all <- CreateSeuratObject(counts = ct_symbol)
as.data.frame(sce.all@assays$RNA$counts[1:10, 1:2])

结果如下:

后面学员应该就可以进行愉快的分析了~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考基因组注释文件介绍:
  • 每一列的含义:
  • 第九列的具体含义:
  • 课上专门针对这个文件的练习:R版本
  • bash编程代码版本
  • 现在到了该融汇贯通的时候了,我们上课讲解的是人这个物种,现在换为驴:
  • 首先先去下载驴的gtf文件:
  • 提取基因ID与symbol对应关系:
  • 读取单细包数据:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档