R语言整理gdc-client工具下载的TCGA数据

提取临床信息

##提取临床信息

rm(list=ls())
options(stringsAsFactors = F)
#######Load the packages required to read XML files.
library("XML")
library("methods")
getwd()
dir='E:/Rsudio_workstation/TCGA/GDC/clinical/' 
##设置临床信息所在的路径
all_fiels=list.files(path = dir,pattern='*.xml$',recursive=T)
###提取临床信息
cl = lapply(all_fiels
            , function(x){
              result <- xmlParse(file = file.path(dir,x)) 
              rootnode <- xmlRoot(result)  
              xmldataframe <- xmlToDataFrame(rootnode[2]) 
              return(t(xmldataframe))
            })
###关于rootnode[1]还是rootnote[2]还是有区别的,,
##rootnode[1]提取的不是临床信息
cl_df <- t(do.call(cbind,cl))
# Error in (function (..., deparse.level = 1)  : 
#             number of rows of matrices must match (see arg 14)
str(cl)
##大部分元素有66行,只有少部分有6行
ca<-cl[sapply(cl,nrow)==66]
nca<-cl[sapply(cl,nrow)==6]
ca_data<-t(do.call(cbind,ca))
class(ca_data)
nca_data<-t(do.call(cbind,nca))
class(nca_data)
save(ca_data,nca_data,file = 'CRC_TCGA_clinical.Rdata')

整理RNA-seq数据

dir='E:/Rsudio_workstation/TCGA/GDC/RNA-seq/'
all_fiels=list.files(path = dir,
                     pattern='*htseq.counts.gz$',
                     recursive=T)
RNA_seq = lapply(all_fiels
             , function(x){
               result <- read.table(file=file.path(dir,x),
                                    sep = "\t")
               return(result)
             })

exp = lapply(all_fiels
            , function(x){
              result <- read.table(file=file.path(dir,x),
                                   sep = "\t")[,2]
              return(result)###fread:data.table读取快
            })
exp_colname = lapply(all_fiels
             , function(x){
               result <- read.table(file=file.path(dir,x),
                                    sep = "\t")[,1]
               return(result)
             })
###这里也可以对提取的RNA_seq提取偶数列即可
###tmp<-tmp[,seq(2,)]
str(exp)
exp_data<-do.call(cbind,exp)
exp_data_cl<-do.call(cbind,exp_colname)
exp_data_cl[1:5,1:5]
exp_data_1<-cbind(exp_data_cl[,1],exp_data)
exp_data_1[1:3,1:3]
rownames(exp_data_1)<-exp_data_1[,1]
exp_data_1<-exp_data_1[,-1]
dim(exp_data_1)
exp_data_1<-t(exp_data_1)
save(exp_data_1,file="RNA_seq_CRC.Rdata")

但是这里的RNA_seq并没有对应样品名,我们还需要将文件的名称和样品名对应起来

GDC下载数据TSV和JSASON文件

一般TSV格式文件或者JASON格式文件内含有文件名和样品ID或barcode的对应关系
首先在GDC官网选择数据后下载TSV及JASON文件,移动到R工作目录下面
R语言整理gdc-client工具下载的TCGA数据_第1张图片
TSV读取文件直接用

read.table(file=",sep="\t")

读取即可,但是JASON文件需要专门的包来读取

###对应样本名
###在GDC官网下载jason文件
###下载下来后用R读取;
install.packages("rjson")
library(rjson)
result<-fromJSON(file = "files.2021-07-30.json")
str(result)
lapply(result, function(x){x$file_name})
f<-unlist(lapply(result, function(x){x$file_name}))
result[[1]]
id<-unlist(lapply(result, function(x){x$cases[[1]]$case_id}))
###以上我们提取了对应关系的filename和ID,形成一个datafram id_filename

id_filename<-cbind(f,id)
id_filename<-data.frame(f=f,id=id)
##或者直接用下面的方法组键dataframe
###meta<-data.frame(f=f,is=id)
id_filename[1:3,1:2]
###提取我们下载的表达数据的文件名fn
fn<-unlist(lapply(strsplit(all_fiels,"/"),function(x)x[[2]]))
##看一下这个文件名在f里面的顺序是怎样的
match(fn,id_filename$f)
id_filename[match(fn,id_filename$f),2]
exp_data_1[1:3,1:3]
rownames(exp_data_1)<-id_filename[match(fn,id_filename$f),2]
exp_data_1[1:3,1:3]
save(exp_data_1,file="CRC_RNA_data_with_sample_name.Rdata")

这样就得到了具有样本名称的表达矩阵

获取有临床信息的样本表达矩阵

rm(list=ls())
options(stringsAsFactors = F)

load(file="CRC_TCGA_clinical.Rdata")
load(file="CRC_RNA_data_with_sample_name.Rdata")
####提取有临床信息的样品的表达矩阵
meta<-as.data.frame(ca_data)
match(meta$bcr_patient_uuid,rownames(exp_data_1))
###验证一下
exp_data_1[199,1:3]
exp_data_1[1:2,1:2]
a<-exp_data_1[199:200,1:3]
rownames(a)
##c5c4a0a5-900d-483d-9282-475654d63265
b<-match(meta$bcr_patient_uuid,rownames(exp_data_1))

###没有问题,我们取这些表达矩阵
exp<-exp_data_1[b,]
dim(exp)
exp<-na.omit(exp)
###得到了有临床信息的表达矩阵
cl<-data.frame(Sample=meta$bcr_patient_barcode,id=meta$bcr_patient_uuid)
c<-match(rownames(exp),cl$id)
meta<-meta[c,]
exp2<-cbind(cl,exp)
exp2[1:4,1:4]     
rownames(exp2)<-exp2[,1]
exp2<-exp2[,-c(1,2)]
exp2<-t(exp2)
dim(exp2)
##[1] 60488   433
save(exp2,file="CRC_433_sample_with_cl.Rdata")

这样就得到了433个有临床信息的表达矩阵。
接下来的ID转换参考:R语言ID转化

你可能感兴趣的:(数据库学习,r语言,TCGA)