生信-使用R語(yǔ)言將gdc數(shù)據(jù)轉(zhuǎn)化為基因表達(dá)矩陣

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]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容