转录组测序目前主要有两种形式,RNA-seq和microarry。这两种技术产生的数据在GEO数据库中都有很多,其中RNA-seq的数据大多是已经注释过的symbol为行名的矩阵,可以拿来直接用;而芯片数据还需要我们自行转化为symbol。相信很多小伙伴都做过人的基因探针注释,这套体系也很完善,有专门的数据库,R包,和一些小工具。然而小鼠的基因探针注释还不是很成熟,今天小编就来分享一下小鼠基因探针的注释。
PS(因为小编自己代码能力水平不高,也是经高手指点,如有疑问,可以在下方留言。)
说到基因探针注释,肯定需要GPL文件,大多数数据来源作者会自己上传到GEO同一个序列号下,大家注释前需要一同下载
相信自行注释过探针的小伙伴,第一反应肯定像小编一样都是找GPL文件中有没有symbol那一列,如果有的话直接提取出来就好啦,如果都是这样,小编也没有必要写这个推文啦,写就写点特别的,比如GPL11533-9491这个注释文件,呐
明显没有咱们想要的那一列呀,肿末办。
"一开始我只顾着看你,所以认不清...."
有人会说可以找出GB_ID再转换成symbol,很好,开始小编也是这样想滴;然而,这样转成另一种ID还是不会注释呀,对不对,所以肯定还得想别的法子
桥豆麻袋,我好像看到了什么
熟悉而又陌生的你,这不就是小鼠的symbol,真是踏破铁鞋五米处,得来全都靠视力。
我只要把这列的信息提取出来,再稍微加工一下,是不是就.....
那么,开始展示
1.准备需要的GPL文件
library(tidyverse)
setwd("E:\\小鼠ID转化")
rm(list=ls())
# 制作注释文件
GPL <- read.delim("ann.txt",stringsAsFactors=FALSE,skip = 12 )#skip去除前面无用信息
colnames(GPL)
class(GPL)
GPL <- GPL[,c("ID","gene_assignment")]
a <- str_extract(GPL$gene_assignment,"ENSMUST(.+)//(.+)")#切割字符
head(a,5)
b <- str_split(a,"//",n=3,simplify = T)[,2]#取第二部分symbol的信息
head(b,5)
GPL$gene_assignment <- b
c <- str_detect(GPL$gene_assignment,"")
head(c,5)
GPL <- GPL[c,]
GPL$gene_assignment <- str_trim(GPL$gene_assignment)
head(GPL)
write.table(GPL,"anno_gpl_new.txt",sep = "\t",row.names = F)
2.制作矩阵文件
probeMatrix <- data.table::fread("probeMatrix.txt")
data <- merge(probeMatrix,GPL,by.x = "ID_REF",by.y = "ID")
table(is.na(data$gene_assignment))
exprSet <- data %>%
column_to_rownames(var="ID_REF") %>%
#重新排列
select(gene_assignment,everything()) %>%
#求出平均数(这边的点号代表上一步产出的数据)
mutate(rowMean =rowMeans(.[grep("GSM", names(.))])) %>%
#把表达量的平均值按从大到小排序
arrange(desc(rowMean)) %>%
# 留下第一个
distinct(gene_assignment,.keep_all = T) %>%
#反向选择去除rowMean这一列
select(-rowMean) %>%
# 列名变成行名
column_to_rownames(var = "gene_assignment")
write.table(exprSet,"exprSet_new.txt",sep = "\t")
好啦,结束啦!
理解这个代码需要对正则表达式有一定的掌握,其次,stringr和dplyr这两个包那是super重要滴,一定要熟练掌握这两个包,相关的教程网上也有很多。