從gdc-client下載數(shù)據(jù)后,接下來(lái),我們可以嘗試把gdc數(shù)據(jù)轉(zhuǎn)化為基因表達(dá)矩陣,這里需要對(duì)原始數(shù)據(jù)文件進(jìn)行加工處理
1.準(zhǔn)備工作
創(chuàng)建一個(gè)工作目錄,將樣本文件夾放在all文件夾下
在本地選擇一個(gè)文件夾:f:/gdc/,打開(kāi)R-Studio
# 設(shè)置目錄
setwd("f:/gdc/")
# 獲取當(dāng)前目錄
getwd()
# 新建文件夾all,zip,unzip,
# 想要的效果:all放所有樣本文件,zip放目標(biāo)的壓縮文件,unzip放目標(biāo)文件
dir.create('all')
dir.create('zip')
dir.create('unzip')
將所有樣本文件夾中的放到all文件夾下

所有樣本文件
文件結(jié)構(gòu)需要了解一下,打開(kāi)以上任意一個(gè)文件夾,我們的目標(biāo)只需要counts.gz的壓縮包里邊的文件,所以這里需要進(jìn)行文件預(yù)處理

樣本文件
2.文件預(yù)處理
all文件夾中的所有文件,提取出里邊的壓縮文件到zip文件夾
setwd("f:/gdc/all")
getwd()
# 不要遍歷文件內(nèi)的文件,直接循環(huán)一次就夠了
allFolder<-list.dirs(".",TRUE,FALSE)
# allFolder下每一個(gè)文件由壓縮包+log文件夾組成(如上圖),這里只需要將壓縮包拿出來(lái)
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)
}
}
}

zip效果圖
將這些壓縮文件,使用系統(tǒng)的解壓工具,手動(dòng)解壓到unzip文件夾下

使用系統(tǒng)解壓工具進(jìn)行手工解壓

等待ing
得到最后能夠進(jìn)行數(shù)據(jù)處理的數(shù)據(jù)集

最終想要的數(shù)據(jù)集
3.數(shù)據(jù)處理
將這些文件里面的數(shù)據(jù)合并成想要的基因表達(dá)矩陣
setwd("f:/gdc/unzip")
getwd()
x_merge=NULL
i<-list.files()
#merge所有的文件為x_merge,即x坐標(biāo)為每一個(gè)文件名,y坐標(biāo)為文件對(duì)應(yīng)的值,
# 舉例 A B C三個(gè)文件,A有數(shù)據(jù)h1:1,h2:2,h3:3,B有數(shù)據(jù)h1:1,h2:1,h3:1,C有數(shù)據(jù)h1:3,h2:3,h3:3
# 那么merge后就是y坐標(biāo)為h1,h2,h3,x坐標(biāo)為A,B,C,對(duì)應(yīng)坐標(biāo)值即數(shù)據(jù)值,例如(A,h1)數(shù)據(jù)為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文件里邊的數(shù)據(jù)代表什么,有什么用

counts文件的數(shù)據(jù)
所有counts合并后的數(shù)據(jù)集:x_merge

x_merge
4.演示例子
# 演示:獲取最后五個(gè),并輸出前3列前10行的數(shù)據(jù)表格
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]
演示:獲取最后五個(gè),并輸出前3列前10行的數(shù)據(jù)表格

演示例子
5. R腳本大放送
#獲取當(dāng)前目錄
setwd("f:/gdc/")
getwd()
#新建文件夾all,將所有樣本文件夾中的壓縮數(shù)據(jù)移動(dòng)到all文件夾下
dir.create('all')
dir.create('zip')
dir.create('unzip')
# 手動(dòng)把之前的所有文件放在all下
setwd("f:/gdc/all")
getwd()
# 不要遍歷文件內(nèi)的文件,直接循環(huán)一次就夠了
allFolder<-list.dirs(".",TRUE,FALSE)
# allFolder下每一個(gè)文件由壓縮包+log文件夾組成,這里只需要將壓縮包拿出來(lái)
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中的壓縮文件,全選,右鍵使用解壓工具全部解壓到另外一個(gè)路徑f:/gdc/unzip"
setwd("f:/gdc/unzip")
getwd()
x_merge=NULL
i<-list.files()
#merge所有的文件為x_merge,即x坐標(biāo)為每一個(gè)文件名,y坐標(biāo)為文件對(duì)應(yīng)的值,
# 舉例 A B C三個(gè)文件,A有數(shù)據(jù)h1:1,h2:2,h3:3,B有數(shù)據(jù)h1:1,h2:1,h3:1,C有數(shù)據(jù)h1:3,h2:3,h3:3
# 那么merge后就是y坐標(biāo)為h1,h2,h3,x坐標(biāo)為A,B,C,對(duì)應(yīng)坐標(biāo)值即數(shù)據(jù)值,例如(A,h1)數(shù)據(jù)為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
# 獲取最后五個(gè)
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]