从gdc-client下载数据后,接下来,我们可以尝试把gdc数据转化为基因表达矩阵,这里需要对原始数据文件进行加工处理
1.准备工作
创建一个工作目录,将样本文件夹放在all文件夹下
在本地选择一个文件夹:f:/gdc/,打开R-Studio
# 设置目录
setwd("f:/gdc/")
# 获取当前目录
getwd()
# 新建文件夹all,zip,unzip,
# 想要的效果:all放所有样本文件,zip放目标的压缩文件,unzip放目标文件
dir.create('all')
dir.create('zip')
dir.create('unzip')
将所有样本文件夹中的放到all文件夹下
文件结构需要了解一下,打开以上任意一个文件夹,我们的目标只需要counts.gz的压缩包里边的文件,所以这里需要进行文件预处理
2.文件预处理
all文件夹中的所有文件,提取出里边的压缩文件到zip文件夹
setwd("f:/gdc/all")
getwd()
# 不要遍历文件内的文件,直接循环一次就够了
allFolder<-list.dirs(".",TRUE,FALSE)
# allFolder下每一个文件由压缩包+log文件夹组成(如上图),这里只需要将压缩包拿出来
for(f in allFolder){
# x.path为f所在的文件下文件的文件路径,paste作用是拼接n与list.files(n),
# 并使用sep做连接词组成路径
x.path=paste(f,list.files(f),sep='/')
# 再深入,获取压缩文件(忽略logs文件夹),并拷贝到'f:/gdc/zip'路径
for(filePath in x.path){
if(file_test("-f", filePath)){
file.copy(filePath,'f:/gdc/zip',recursive = T)
}
}
}
将这些压缩文件,使用系统的解压工具,手动解压到unzip文件夹下
得到最后能够进行数据处理的数据集
3.数据处理
将这些文件里面的数据合并成想要的基因表达矩阵
setwd("f:/gdc/unzip")
getwd()
x_merge=NULL
i<-list.files()
#merge所有的文件为x_merge,即x坐标为每一个文件名,y坐标为文件对应的值,
# 举例 A B C三个文件,A有数据h1:1,h2:2,h3:3,B有数据h1:1,h2:1,h3:1,C有数据h1:3,h2:3,h3:3
# 那么merge后就是y坐标为h1,h2,h3,x坐标为A,B,C,对应坐标值即数据值,例如(A,h1)数据为1
for(n in i){
x=read.delim(n,col.names = c('ID',substr(n,1,9)))
if(is.null(x_merge)){
x_merge=x
}
else{
x_merge=merge(x_merge,x,by='ID')
}
}
rownames(x_merge)<-x_merge$ID
首先理解一下,原本counts文件里边的数据代表什么,有什么用
所有counts合并后的数据集:x_merge
4.演示例子
# 演示:获取最后五个,并输出前3列前10行的数据表格
x_reduce=x_merge[-(1:5),]
x_reduce=x_reduce[,-1]
rownames(x_reduce)=x_merge$ID[-c(1:5)]
head(x_reduce,10)[,1:3]
演示:获取最后五个,并输出前3列前10行的数据表格
5. R脚本大放送
#获取当前目录
setwd("f:/gdc/")
getwd()
#新建文件夹all,将所有样本文件夹中的压缩数据移动到all文件夹下
dir.create('all')
dir.create('zip')
dir.create('unzip')
# 手动把之前的所有文件放在all下
setwd("f:/gdc/all")
getwd()
# 不要遍历文件内的文件,直接循环一次就够了
allFolder<-list.dirs(".",TRUE,FALSE)
# allFolder下每一个文件由压缩包+log文件夹组成,这里只需要将压缩包拿出来
for(f in allFolder){
# x.path为f所在的文件下文件的文件路径,paste作用是拼接n与list.files(n),并使用sep做连接词
# 组成路径
x.path=paste(f,list.files(f),sep='/')
# 获取压缩文件,并拷贝到'f:/gdc/zip'路径
for(filePath in x.path){
if(file_test("-f", filePath)){
file.copy(filePath,'f:/gdc/zip',recursive = T)
}
}
}
# 将zip中的压缩文件,全选,右键使用解压工具全部解压到另外一个路径f:/gdc/unzip"
setwd("f:/gdc/unzip")
getwd()
x_merge=NULL
i<-list.files()
#merge所有的文件为x_merge,即x坐标为每一个文件名,y坐标为文件对应的值,
# 举例 A B C三个文件,A有数据h1:1,h2:2,h3:3,B有数据h1:1,h2:1,h3:1,C有数据h1:3,h2:3,h3:3
# 那么merge后就是y坐标为h1,h2,h3,x坐标为A,B,C,对应坐标值即数据值,例如(A,h1)数据为1
for(n in i){
x=read.delim(n,col.names = c('ID',substr(n,1,9)))
if(is.null(x_merge)){
x_merge=x
}
else{
x_merge=merge(x_merge,x,by='ID')
}
}
rownames(x_merge)<-x_merge$ID
# 获取最后五个
x_reduce=x_merge[-(1:5),]
x_reduce=x_reduce[,-1]
rownames(x_reduce)=x_merge$ID[-c(1:5)]
head(x_reduce,10)[,1:3]