生信-使用R语言将gdc数据转化为基因表达矩阵

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文件夹下
《生信-使用R语言将gdc数据转化为基因表达矩阵》
文件结构需要了解一下,打开以上任意一个文件夹,我们的目标只需要counts.gz的压缩包里边的文件,所以这里需要进行文件预处理
《生信-使用R语言将gdc数据转化为基因表达矩阵》

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)
    }
  }
}

《生信-使用R语言将gdc数据转化为基因表达矩阵》
将这些压缩文件,使用系统的解压工具,手动解压到unzip文件夹下
《生信-使用R语言将gdc数据转化为基因表达矩阵》
《生信-使用R语言将gdc数据转化为基因表达矩阵》
得到最后能够进行数据处理的数据集
《生信-使用R语言将gdc数据转化为基因表达矩阵》

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文件里边的数据代表什么,有什么用
《生信-使用R语言将gdc数据转化为基因表达矩阵》
所有counts合并后的数据集:x_merge
《生信-使用R语言将gdc数据转化为基因表达矩阵》

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行的数据表格
《生信-使用R语言将gdc数据转化为基因表达矩阵》

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/copy'路径
  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]
    原文作者:lietobrain
    原文地址: https://blog.csdn.net/A_Gui_Code/article/details/103625674
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞