从TCGA下载数据并处理

下载count文件

image.png

使用gdc-client下载count文件和xml文件

###需要下载的文件有两种,一种是.xml格式的临床数据,一种是表达矩阵的数据(还要一个json文件)
library(stringr)
proj="TCGA-BC"
#建好两类文件的文件夹,把下好的数据存到里面
if(!dir.exists("clinical"))dir.create("clinical")
if(!dir.exists("expdata"))dir.create("expdata")
dir()

调用gdc-client下载的命令在windows的terminal终端进行

image.png

整合数据

library(BiocManager)
BiocManager::install("XML")
library(XML)

#.xml的临床数据保存在各个目录下,将它们整合到一起
xmls<-dir("clinical/",pattern = "*.xml$",recursive = T)
cl<-list()
for (i in 1:length(xmls)) {
  result<-xmlParse(paste0("clinical/",xmls[[i]]))
  rootnode<-xmlRoot(result)
  cl[[i]]<-xmlToDataFrame(rootnode[2])
}#cl里面现在存了若干个表格,还要将若干表格整合到一张表里
library(plyr)
information_needed<-c("bcr_patient_barcode","vital_status","days_to_last_followup","days_to_death")#需要的临床信息
#将若干表格中需要的临床信息整合到一张表里
c<-rbind(cl[[1]][information_needed],cl[[2]][information_needed])
for (i in 3:408) {
  c<-rbind(c,cl[[i]][information_needed])
}
#这一步是针对生存信息(Alive or Dead)的状态进行一个判断
for (i in 1:408) {
  if (c$vital_status[i]=="Alive") {c$Status[i]=1}
  if (c$vital_status[i]=="Dead") {c$Status[i]=0}
}
#保存表型数据
write.csv(c,"phenotype_data.csv",quote = F)

#表达数据保存在各个目录下,将它们整合到一张表格中
count_files<-dir("expdata_BC/",pattern = "*.counts.gz$",recursive = T)
exp<-list()
for (i in 1:length(count_files)) {
  exp[[i]]<-read.table(paste0("expdata_BC/",count_files[[i]]),row.names = 1,sep = "\t")
}
exp<-do.call(cbind,exp)
dim(exp)
#这样得到的表达矩阵没有列名,加上列名
meta<-jsonlite::fromJSON("metadata.cart.2022-01-06.json")#之前通过metadata下载的.json文件
ids<-meta$associated_entities
#得到file_name和sample_ID的对应矩阵
ID<-sapply(ids,function(x){x[,1]})
file2id<-data.frame(file_name=meta$file_name,ID=ID)
View(file2id)
#修改矩阵的列名
count_files2<-stringr::str_split(count_files,"/",simplify = T)[,2]
table(count_files2 %in% file2id$file_name)
#count_files2的顺序就是列名的顺序,根据它来调整file2id的顺序。
file2id<-file2id[match(count_files2,file2id$file_name),]
colnames(exp)<-file2id$ID

#ENSEMBL号转换成Gene symbol名
BiocManager::install("AnnotationDbi")
BiocManager::install("org.Hs.eg.db")
# 加载包
library("AnnotationDbi")
library("org.Hs.eg.db")
#将ENSG号提取出来
ENSG_name<-rownames(exp)
head(ENSG_name)
#要去掉"ENSG00000000003.13"小数点后面的数字,不然没法转换
ENSG_name_2<-c()
for (i in 1:length(ENSG_name)) {
  ENSG_name_2[i]<-substr(ENSG_name[i],1,15)
}
head(ENSG_name_2)
#ENSG转换成基因名
ENSG_symbol<- mapIds(org.Hs.eg.db,
keys=ENSG_name_2,
column="SYMBOL",
keytype="ENSEMBL",
multiVals="first")
symbol_names<-c()
for (i in 1:length(ENSG_name_2)) {
  symbol_names[i]<-ENSG_symbol[[i]]
}
head(symbol_names)
#将symbol名添加到exp矩阵中
exp$symbol<-symbol_names
#有一些行没有对应的基因名要去掉
number<-c()
for (i in 1:length(ENSG_name_2)) {
  if (is.na(exp[i,430])) {  #这里要改一下列数
    number<-c(number,i)
  }
}
exp1<-exp
exp1<-exp1[-number,]
dim(exp1)

#对于重复的基因取均值最大的一行
rowMeans<-apply(exp1,1,function(x) mean(as.numeric(x),na.rm=T))
exp2<-exp1[order(rowMeans,decreasing = T),]
exp3<-exp2[!duplicated(exp2[,dim(exp2)[2]]),]#express的最后一列为gene name
exp4<-na.omit(exp3)
rownames(exp4)<-exp4[,dim(exp4)[2]]
exp4<-exp4[,-dim(exp4)[2]]
View(exp4)

#保存bulk数据集
write.csv(exp4,"BC_bulk_data.csv",quote = F)

对count文件归一化,计算FPKM

#标准化
group_information<- data.frame(TCGA_id =colnames(exp4))
table(substring(group_information$TCGA_id,14,15))#用table这个函数统计一下BC样本的分类
sample<-ifelse(substring(group_information$TCGA_id,14,15)=="01","cancer","tissue")#这里的factor是为了dds的需要
group_information$sample<-as.factor(sample)#这里的factor是为了dds的需要


if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")

BiocManager::install("DESeq2",force = TRUE)
library(DESeq2)

mycounts<-data.frame("gene_id"=rownames(exp4))
mycounts<-data.frame(mycounts,exp4)
dds<-DESeqDataSetFromMatrix(countData=mycounts,
                             colData=group_information,
                             design=~sample,
                             tidy=TRUE)
dds <- DESeq(dds)
vsd <- vst(dds, blind = FALSE)
bulk_data<-as.data.frame(assay(vsd))
write.csv(exp4,"BC_bulk_data.csv",quote = F)

整合临床生存数据和bulk数据

image.png

image.png
#统一ID
index<-colnames(bulk_data)
index_1<-substring(index,1,4)
index_2<-substring(index,6,7)
index_3<-substring(index,9,12)
a<-list()
for (i in 1:length(index)) {
  a[i]<-paste(index_1[i],index_2[i],index_3[i],sep = "-",collapse = NULL)
}
colnames(bulk_data)<-a

#在表达矩阵中找出那些有临床表型数据的列
b<-bulk_data[,colnames(bulk_data) %in% a]
#在临床表型数据中去除那些没有表达矩阵的列
pheno_3<-pheno_2[,colnames(pheno_2) %in% colnames(b)]
#将表达矩阵和临床表型数据整合到一起,列的顺序自然就一样了,再拆分,列名就是对应的了
c<-merge(b,pheno_3,by = colnames(b),all = T,sort = F)
#读取临床生存数据
bulk_survival<-read.csv("bulk_phenotype.csv")
bulk_data_unique<-bulk_data[,!duplicated(colnames(bulk_data))]#去掉bulk_data中重复的列
#在表达矩阵中找出那些有临床表型数据的列
b<-bulk_data_unique[,colnames(bulk_data_unique) %in% bulk_survival$TCGA_patient_barcode]

#bulk_survival$TCGA_patient_barcode的顺序就是列名的顺序,根据它来调整bulk_survival的顺序。
bulk_survival_sorted<-bulk_survival[match(colnames(bulk_data_unique),bulk_survival$TCGA_patient_barcode),]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容