2024新版TCGA转录组+临床数据R语言下载和整理

文摘   2024-10-25 19:05   美国  

医学科研新动向

TCGA

TCGA(The Cancer Genome Atlas)是一个拥有海量肿瘤基因组数据的公共数据库,为癌症研究提供了丰富的资源。掌握如何高效获取并分析这些数据对研究至关重要!

📊 本篇推文将快速了解:如何从TCGA获取肿瘤基因表达数据。

登录TCGA网站来下载数据:https://portal.gdc.cancer.gov/

/ TO  /

Go

/ TO  /

01


数据下载

01. 点击 Cohort Builder

02. 以TCGA-DLBC为例:

Program → TCGA

Project  TCGA-DLBC

03. 点击Repository

Experimental Strategy →  RNA-Seq 
Data Category → transcriptome profiling 
Data Type →  Gene Expression Quantification 
Workflow Type → STAR - Counts 

04. 下载必须文件

manifest + Cart + Metadata + Clinical.csv

02


基因表达矩阵获取

将下载的文件保存在分析路径中:

# 设置工作目录,记得将其改为自己的文件路径setwd("C:\\Users\\Desktop\\data") 
# 指定文件名和路径metafile <- "metadata.cart.2024-10-22.json" # 下载的metadata文件名称gdcfliename <- "gdc_download_20241022_060533.962963.tar.gz" # cart文件的名称path1 <- "gdc_download_20241022_060533.962963\\" # 解压后文件的路径outfilename <- "TCGA-DLBC_FPKM.txt" # 输出表达矩阵文件的名称
# 解压文件untar(gdcfliename, exdir = "gdc_download_20241022_060533.962963")
# 读取metadata文件json <- jsonlite::fromJSON(metafile)sample_id <- sapply(json$associated_entities, function(x) { x[, 1] })
# 创建包含样本ID和文件名的数据框file_sample <- data.frame(sample_id, file_name = json$file_name)
# 列出所有包含基因计数的文件count_file <- list.files(path1, pattern = '*gene_counts.tsv', recursive = TRUE)
# 提取文件名count_file_name <- strsplit(count_file, split = '/')count_file_name <- sapply(count_file_name, function(x) { x[2] })
# 创建一个空矩阵,用于存储表达数据matrix <- data.frame(matrix(nrow = 60660, ncol = 0))
# 循环读取每个基因计数文件,并将其合并到矩阵中for (i in 1:length(count_file_name)) { path <- paste0(path1, count_file[i]) # 构建文件路径 data <- read.delim(path, fill = TRUE, header = FALSE, row.names = 1) # 读取文件 colnames(data) <- data[2, ] # 设置列名为第二行内容 data <- data[-c(1:6), ] # 删除前6行 data <- data[7] # 选择第7列(表达数据) # 将样本ID设置为列名 colnames(data) <- file_sample$sample_id[which(file_sample$file_name == count_file_name[i])] # 将数据列绑定到矩阵 matrix <- cbind(matrix, data)}
# 读取第一个样本的文件,用于获取基因名sample1 <- paste0(path1, count_file[1])names <- read.delim(sample1, fill = TRUE, header = FALSE, row.names = 1)colnames(names) <- names[2, ] # 设置列名为第二行内容names <- names[-c(1:6), ] # 删除前6行names <- names[, 1:2] # 选择前两列
# 获取矩阵和基因名的交集same <- intersect(rownames(matrix), rownames(names))
# 筛选交集部分的数据matrix <- matrix[same, ]names <- names[same, ]
# 添加基因symbol到矩阵matrix$symbol <- names[, 1]matrix <- matrix[, c(ncol(matrix), 1:(ncol(matrix) - 1))] # 调整列顺序
# 输出结果到指定文件write.table(matrix, file = outfilename, row.names = FALSE, quote = FALSE, sep = "\t")

03


临床数据提取

每个字段的解释:

  1. case_submitter_id:每个样本的唯一标识符,用来标记和区分不同患者或样本。

  2. vital_status:表示患者的生存状态,通常用“生存”(Alive)或“死亡”(Deceased)来标记。如果患者还活着,days_to_last_follow_up 会有值;如果患者去世了,days_to_death 会有值。

  3. days_to_death:表示从诊断到死亡的天数。如果患者已去世,这个字段会记录他们从确诊到去世经历的时间(天数)。如果患者还活着,这个字段通常为空。

  4. days_to_last_follow_up:从确诊到最后一次随访的天数。如果患者还活着,这个字段记录最后一次随访的时间(天数)。如果患者已去世,这个字段通常为空。

# 加载必要的库library(readr)library(tidyverse)library(dplyr)library(data.table)setwd() # clinical.tsv保存的绝对路径
# 读取clinical数据clin <- fread("clinical.tsv", data.table = FALSE)
# 查看数据的前几行,确保成功读取head(clin)
# 提取感兴趣的列并删除重复项clin_time <- clin %>% dplyr::select( case_submitter_id, vital_status, days_to_death, days_to_last_follow_up, age_at_index, gender, ajcc_pathologic_t, ajcc_pathologic_m, ajcc_pathologic_n, ajcc_pathologic_stage ) %>% dplyr::filter(!duplicated(case_submitter_id))
# 查看数据的前几行以确保操作成功head(clin_time)
clin_merge <- clin_time %>% dplyr::mutate( OS.time = case_when( vital_status == "Alive" ~ days_to_last_follow_up, # 若存活,使用 days_to_last_follow_up vital_status == "Dead" ~ days_to_death # 若死亡,使用 days_to_death ), OS = case_when( vital_status == "Alive" ~ 0, # 存活用0表示 vital_status == "Dead" ~ 1 # 死亡用1表示 ) )
# 查看数据的前几行以确保操作正确head(clin_merge)
clin_merge1 <- clin_merge %>% dplyr::rename( age = age_at_index, # 将age_at_index列名修改为age T = ajcc_pathologic_t, # 将ajcc_pathologic_t列名修改为T M = ajcc_pathologic_m, # 将ajcc_pathologic_m列名修改为M N = ajcc_pathologic_n, # 将ajcc_pathologic_n列名修改为N stage = ajcc_pathologic_stage # 将ajcc_pathologic_stage列名修改为stage )
# 查看数据的前几行以确保列名已修改head(clin_merge1)
# 删除第3和第4列,并去除缺失值clin <- clin_merge1[,-(3:4)] # 删除第3和第4列clin <- na.omit(clin) # 删除包含NA的行
# 将结果保存为一个制表符分隔的文件(TSV格式)write.table(clin, file = "clinical.txt", sep = "\t", row.names = FALSE, quote = FALSE)
# 将结果保存为一个CSV文件write.csv(clin, file = "clinical.csv", row.names = FALSE, quote = FALSE)

-END-

文字丨本人编写,如有补充,请随时告诉我

后台回复TCGA即可获取完整代码

医学科研新动向
每日分享-相关领域包括:MIMIC、NHANES、SEER、GEO、TCGA、CHARLS等公共数据库最新研究成果解读。深入剖析机器学习、生信分析与临床流行病学研究方法。
 最新文章