用首先下载GEO数据 有的下载会有几个对象 有的就只有一个 但是不影响 因为GSE就是数据的集合,这几个不同的对象只是测序平台不同而已 这里选择第二个对象
gset = getGEO('GSE12417', destdir=".",getGPL = F)
e2=gset[[2]] #取下载geo数据list中的第一个对象 可以看见它测序用哪一个GPL平台
#也可以取其他的对象,反正记住对应的测序GPL平台
expr=e2@assayData[["exprs"]] #获取表达矩阵
expr=exprs(e2) #用function直接获得了表达矩阵 二者一样
附三个对象:可以看到第二个对象测序平台为GPL96
去geo数据库搜索GSE12417,往下翻
点击GPL96进入该界面
download到当前工作路径下 ,然后读入
anno=fread("GPL96-57554.txt",header = T,data.table = F)#一定要data.table=F
gene.1=anno[,c("ID","Gene Symbol")] #获得探针对应symbol的data.frame
#由于一个探针可能对应多个symbol 而我们只要一个 对应多个时,文件会帮我们把不同的symbol按照不同形式分#开
#检查一下是什么分割
x1=x[,2] #将Gene Symbol列提取出来
x1[c(1:25)] #发现是" // "分割
#先处理symbol
a1=strsplit(x1,split = " // ",fixed = T) #分割symbol
##把分割后的字符串的第一个元素提取出来,合并成为一个新的向量
gene.all = sapply(a1,function(x){x[1]})
a3=data.frame(anno$ID,gene.all) #创建一个id与对应data.frame
#开始merge
expr=as.data.frame(expr) #由于merge函数是对两个数据框进行merge 而表达矩阵为matrix 要转
exp1=merge(x=a3,y=expr,by.x =1 ,by.y =0 ) #这里有一个小技巧 将a3放前面 exp的第0列就是id号
exp1=merge(x=a3,y=expr,by.x ="anno.ID" ,by.y =0 ) ###用1和"anno.ID"的效果是一样的
#已经merge好了 修改为标准表达矩阵
View(exp1)#对应后发现 不是标准的表达矩阵 因为rownames为1,2,3,4,5......
#所以要让exp1的rownames为gene.symbol
#首先要对gene.symbol这一列进行处理
exp2=distinct(exp1,gene.all,.keep_all = T) #首先删除重复的基因名 因为多个探针对应同一个基因,这时候行名已经从22283变成了13238
exp3=na.omit(exp2) #删除缺失值
rownames(exp3)=exp3$gene.all
View(exp3)
###将多余的删除
exp4=exp3[,-c(1,2)] #这样就整理好了表达矩阵 标准的表达矩阵为exp4 练习成功