整理从TCGA下载的数据

如果从TCGA官网网页下载数据,或者使用gdc-client工具下载的数据,都是以单个的文件夹形式存储,并且文件夹中的为压缩文件,所以,下载数据后,第一步就是如何把这些文件复制在同一个文件夹中,以利于后续的数据读入。采用R将文件复制并读入同一个文件夹,并制作表达矩阵。

1. 整体规划

对于数据整理,需要解决以下几个问题。
1.将所有的压缩文件存放在一个文件夹中,这些文件不需要解压,因为R可以直接读取这种类型的压缩文件。
2.将这些文件读入R,并与TCGA-id对应
3.与临床信息相对应。

2. 读入同一个文件夹

2.1 写在最前面的思维模式

编程的思维就是把人从重复的劳动中解放出来,如果你知道一件事情如何做,那么和这件事情相似的事情,就可以交给程序。R虽然不是完全的编程语言,但是作为一个统计学语言,最基本的重复、循环这些依然是可以完成的。所以,重点就是,我们要把自己做这件事情的每一步分解细化,告诉计算机需要做什么。

2.2 读入一个文件夹

# multipling the multi-data into one file
dir.create('data_in_one')
for(dirname in dir('rawdata/')){
  file <- list.files(paste0(getwd(),"/rawdata/", dirname), pattern = "*.counts.gz")
  file.copy(from = paste0(getwd(),"/rawdata/",dirname,"/",file),to = "data_in_one")
}
  新建data_in_one文件夹,用来存放压缩文件。从TCGA下载的文件存放于 rawdata。

2.3 匹配文件名和TCGA-ID

# matching the TCGA id
metadata <- jsonlite::fromJSON("metadata.cart.2020-03-18.json")
naid_df <- data.frame()
for (i in 1:nrow(metadata)) {
  naid_df[i,1] <- metadata$file_name[i]
  naid_df[i,2] <- metadata$associated_entities[i][[1]]$entity_submitter_id
}
colnames(naid_df) <- c("filename", "TCGA_id")

读取JSON文件,使用jsonlite::fromJSON相比较而言,是比较好用的一个函数。

2.4 读入表达数据

# loading the data
test <- data.table::fread(paste0('data_in_one/',naid_df$filename[1]))
expr_df <- data.frame(matrix(data = NA, nrow = nrow(test),ncol =  nrow(naid_df)))
for (i in 1:nrow(naid_df)) {
  print(i)
  expr_df[,i] = data.table::fread(paste0("data_in_one/",naid_df$filename[i]))[,2]
}
colnames(expr_df) <- naid_df$TCGA_id
gene_id <- data.table::fread(paste0('data_in_one/',naid_df$filename[1]))$V1
expr_df <- cbind(gene_id=gene_id, expr_df)
tail(expr_df$gene_id,10)

expr_df <- expr_df[1:(nrow(expr_df)-5),]

save(expr_df,file = "expr_df.Rdata")

2.5 删去ensemble ID 的点号

expr_df_nopoint <- expr_df %>% 
  tidyr::separate(gene_id, into = c("gene_id"), sep = "\\.")

之所以删去点,是因为附带点号,不能与gene symbol 对应。

3. 载入gene symbol 与ensemble id对应的文件

# obtaining gtf files
load("gtf_df.Rdata")

3.1 筛选需要的类型

根据TCGA 数据库的数据,可以选取相应的类型,基因表达mRNA,非编码RNA(ncRNA),包括lncRNA。

3.1.1 筛选mRNA

# obtaining mRNA
library(dplyr)
library(tidyr)
mRNA_exprSet <- gtf_df %>% 
  dplyr::filter(type=="gene",gene_biotype=="protein_coding") %>% #筛选gene,和编码指标
  dplyr::select(c(gene_name,gene_id,gene_biotype)) %>% 
  dplyr::inner_join(expr_df_nopoint,by ="gene_id") %>% 
  tidyr::unite(gene_id,gene_name,gene_id,gene_biotype,sep = " | ")

3.1.2 筛选lncRNA

library(dplyr)
library(tidyr)
# lncRNA
ncRNA <- c("sense_overlapping","lincRNA","3prime_overlapping_ncRNA",
           "processed_transcript","sense_intronic",
           "bidirectional_promoter_lncRNA","non_coding",
           "antisense_RNA")
LncRNA_exprSet <- gtf_df %>% 
  dplyr::filter(type=="transcript",transcript_biotype %in% ncRNA) %>% #注意这里是transcript_biotype
  dplyr::select(c(gene_name,gene_id,transcript_biotype)) %>% 
  dplyr::distinct() %>% #删除多余行
  dplyr::inner_join(expr_df_nopoint,by ="gene_id") %>% 
  tidyr::unite(gene_id,gene_name,gene_id,transcript_biotype,sep = " | ")

3.2 标准化数据

# normalization 
metadata <- data.frame(TCGA_id = colnames(expr_df)[-1])
table(substring(metadata$TCGA_id, 14,15))   ####01- 411, 11-19; cancer_411, normal_19
sample <- ifelse(substring(metadata$TCGA_id, 14,15) == "01", "cancer", "normal")
metadata$sample <- sample
metadata$sample <- as.factor(sample)
metadata <- metadata[order(metadata$sample,decreasing = T),]

mycounts <- mRNA_exprSet
dds <- DESeqDataSetFromMatrix(countData = mycounts,
                              colData = metadata,
                              design = ~sample,
                              tidy = T)
dds <- DESeq(dds)

save(dds, file = "mRNA_exprSet_dds_sample.Rdata")

vsd <- vst(dds, blind = FALSE)

plotPCA(vsd, "sample")

mRNA_exprSet_vst <- as.data.frame(assay(vsd))

save(mRNA_exprSet_vst,file = "mRNA_exprSet_vst.Rda")

3.3 差异分析

# differential analysis
res <- results(dds, tidy=TRUE,contrast = c('sample','cancer','normal'))
save(res,file = "DEGs_results.Rda")
write.csv(res, file = 'DEGs_results.csv',row.names = res$row)

这一步,需要注意比较那两者进行比较。

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