保姆级教程!!GEO数据集芯片数据的探针ID转换!!
小伙伴们得到GEO数据集原始数据后,发现密密麻麻的基因表达信息不知道从哪里下手。而且基因表达信息往往有很多我们不需要的信息,并且基因表达谱数据往往也是层次不齐。在这里小云自己整理了一份代码,可以把基因表达谱整理出来,并且把探针ID也转换完成,把数据也归一化处理。
接下来跟着小云去学习一下吧!
在这里小云使用实例数据GSE63514,平台为GPL-570。小伙伴可以自行在GEO数据库中下载。
不过,小云教大家一个小技巧: 在官网搜到自己需要的GEO数据集后,可以在
这个选项中选择查看一下这个数据集中含有那些样本:
此外,在
当我们点击GPL平台后会出现一些信息在这里:
如果这个平台信息含有
那么我们处理数据起来就会很方便,利用Gene Symbol就可以转换ID得到我们想要的基因名称。小伙伴们一定要注意,如果没有这个Symbol信息(有的平台可能只会显示Symbol),小云这里的代码可能不太使用。接下来我们就进入正题吧! 我们得到这个原始数据集,先导入它们: setwd("E:\\生信果") Sys.setlocale('LC_ALL','C') #读取GPL文件 GPL_table = read.table('E:\\生信果\\GPL570-55999.txt',sep = "\t", comment.char = "#", stringsAsFactors = F, header = T, fill = TRUE, quote = "") #读取GSE文件 GSE4100 <- read.table('E:\\生信果\\GSE63514_series_matrix.txt',sep = "\t", comment.char = "!", stringsAsFactors = F,header = T, fill=TRUE)#43931 #导入文件,我们可以查看一下导入的数据形式。
细心的小伙伴会发现,ID这一列不是我们想要的Gene名,这就需要我们吧ID转化一下。 接下来: ID_Sybmol = GPL_table[,c(1,11)] #GPL对应ID列 colnames(ID_Sybmol)[2]="Symbol" #更改名称为Symbol,主要是为了对其求平均函数 c(1,11)这里的11是GPL平台表格里面,代表第11列,小云这里GeneSymbol是11列,所以这里是11,小伙伴们需要数一下自己数据Symbol在第几列。 接下来: #合并ID与基因列 Exp = merge(ID_Sybmol,GSE4100,by.x = "ID",by.y = "ID_REF",all=T) #45782个 Exp = Exp[,-1] View(Exp)#查看一下数据集
这样一来就得到我们想要的基因名称了,但是又出现一个新的问题,基因名有重复的,而且有个基因含有多个,这该怎么办呢,小云再教一招。对数据过滤: #数据过滤,对多余的基因进行删除 Exp = Exp[Exp$Symbol != "",] # Exp = na.omit(Exp) # #去除多余的基因, Exp1 = data.frame(Exp[-grep("/",Exp$"Symbol"),]) #去一对多,grep是包含的意思,-就是不包含 write.table(Exp1,"Exp1.txt",row.names = F,quote = F,sep="\t") 那么这里 就得到干净的基因表达谱
但是,有的小伙伴他的基因表达谱中数据有的异常的大,那么就需要对数据归一化。 接下来小云在继续教大家如何把数据集做平均值处理,这里需要用到for循环处理数据。 #求平均值 meanfun <- function(x) { x1 <- data.frame(unique(x[,1])) colnames(x1) <- c("Symbol") for (i in 2:ncol(x)){ x2 <- data.frame(tapply(x[,i],x[,1],mean)) x2[,2] <- rownames(x2) colnames(x2) <- c(colnames(x)[i], "Symbol") x1 <- merge(x1,x2,by.x = "Symbol",by.y = "Symbol",all=FALSE) } return(x1) } Exp2 <- meanfun(Exp1)
数据就会变规整很多。
我们使用柱状图展示数据形式 # 查看数据 par(cex = 0.7) n.sample=ncol(Exp2[,-1]) if(n.sample>40) par(cex = 0.5) cols <- rainbow(n.sample*1.2) boxplot(Exp2[,-1], col = cols,main="expression value",las=2) write.table(Exp2,"Exp_Original.txt",row.names = F,quote = F,sep="\t") row.names(Exp2) = Exp2[,1] Exp2 = log(Exp2[,-1]) par(cex = 0.7) n.sample=ncol(Exp2) if(n.sample>40) par(cex = 0.5) cols <- rainbow(n.sample*1.2) boxplot(Exp2, col = cols,main="expression value",las=2) Symbol = row.names(Exp2) Exp_test = cbind(Symbol,Exp2) write.table(Exp_test,"Exp.txt",row.names = F,quote = F,sep="\t") 最终得到的数据集就是我们想要的基因表达谱了,小伙伴可以使用得到的基因表达谱做后续的分析啦!
小云这里提醒一下,有的数据集不需要做归一化处理,小伙伴要清楚自己想要得到那个基因表达谱。