生信喵 发表于 2024-12-23 11:25:58

TCGA 临床数据的下载与整理

<h1>背景</h1>
<p>前面我们下载了新版tcga的rnaseq 数据,同时下载了样本的临床数据,此次就可以对临床数据进行整理了。</p>
<h1>一、临床数据整理</h1>
<pre><code>rm(list = ls())####魔幻操作,一键清空~
getwd()
setwd('C:/Users/Administrator/project_gdc2')

#先把下载的临床数据文件解压
tar_file &lt;- &quot;clinical.cart.2024-12-22.tar.gz&quot;# 导入tar.gz文件
dir.create('clinical_data')
extract_dir &lt;- &quot;./clinical_data&quot; #解压后存放位置
untar(tar_file, exdir = extract_dir) #解压tar.gz文件

# 提取临床数据整理生存分析需要的数据
setwd(&quot;C:/Users/Administrator/project_gdc2/clinical_data&quot;) ##设置路径
library(readr)
library(dplyr)

#将下载好的metadata.json文件放入clinical文件夹
# install.packages(&quot;jsonlite&quot;)
library(jsonlite)

json &lt;- jsonlite::fromJSON(&quot;../metadata.cart.2024-12-22.json&quot;) #读取JSON文件

entity_submitter_id &lt;- sapply(json$associated_entities, function(x) unlist(x[, 1]))
case_id &lt;- sapply(json$associated_entities, function(x) unlist(x[, 3]))
sample_case &lt;- t(rbind(entity_submitter_id, case_id))

clinical &lt;- read_tsv('clinical.tsv') #读取tsv文件
clinical &lt;- as.data.frame(clinical[!duplicated(clinical$case_id),]) #去除重复的sample
# 371

str(sample_case)# 查看sample_case的结构
str(clinical)   # 查看clinical的结构
sample_case &lt;- as.data.frame(sample_case)

## 将sample_case$case_id和clinical$case_id转化为字符串格式,便于后续操作。
sample_case$case_id &lt;- as.character(sample_case$case_id)
clinical$case_id &lt;- as.character(clinical$case_id)

matrix &lt;- merge(sample_case,clinical,by=&quot;case_id&quot;,all.x=T)
#424

colnames(clinical)

demo &lt;- c(&quot;case_submitter_id&quot;,&quot;age_at_index&quot;,&quot;ethnicity&quot;,&quot;gender&quot;,&quot;race&quot;,
          &quot;vital_status&quot;,&quot;days_to_death&quot;,&quot;days_to_last_follow_up&quot;,
          &quot;ajcc_pathologic_stage&quot;,&quot;ajcc_pathologic_t&quot;,&quot;ajcc_pathologic_m&quot;,
          &quot;ajcc_pathologic_n&quot;,&quot;treatment_type&quot;)

matrix = matrix[,demo] #筛选需要的临床信息
dim(matrix)# 424 13
colnames(matrix) &lt;- c(&quot;ID&quot;,&quot;Age&quot;,&quot;Ethnicity&quot;,&quot;Gender&quot;,&quot;Race&quot;,
                      &quot;Status&quot;,&quot;days_to_death&quot;,&quot;days_to_last_follow_up&quot;,
                      &quot;Stage&quot;,&quot;T&quot;,&quot;M&quot;,&quot;N&quot;,&quot;Treatment&quot;)

#排除结局为&quot;Not Reported&quot;的Sample,保留Alive和Dead的数据
matrix = matrix
# 422

# 把matrix数值列转换为数值型,便于记录生存信息
matrix$days_to_last_follow_up &lt;- as.numeric(matrix$days_to_last_follow_up)
matrix$days_to_death &lt;- as.numeric(matrix$days_to_death)
matrix$Age &lt;- as.numeric(matrix$Age)

# 去除NA,替换为0
matrix$days_to_last_follow_up = 0
matrix$days_to_death = 0
matrix$Age = 0

matrix$days &lt;- ifelse(matrix$Status=='Alive',matrix$days_to_last_follow_up,matrix$days_to_death)

## 添加生存分析需要的信息:存活状态、月、年
matrix$OS &lt;- ifelse(matrix$Status == &quot;Alive&quot;, 0, 1)
matrix$month=round(matrix$days/30,0) #以month为单位,小数不保留
matrix$OS.time &lt;- floor(matrix$month/12)
floor(12.1)#12 整数年,也可以不取整。
head(matrix)
# 保存临床信息
fwrite(matrix,&quot;../RawData/03.LIHC_clin.txt&quot;) # txt格式
write.csv(matrix, &quot;../RawData/csv/03.LIHC_clin.csv&quot;, row.names = F) # csv格式
</code></pre>
<p>结果如下:<br />
<img src="https://roim-picx-bpc.pages.dev/rest/bXxgSlK.png" alt="" /><br />
后续可以进一步进行生存分析及可视化等操作。</p>

生信喵 发表于 2025-4-2 10:55:53

<p>自38行单独提取出肿瘤组织 的数据</p>
<pre><code>matrix &lt;- merge(sample_case,clinical,by=&quot;case_id&quot;,all.x=T)
#424
# 去除癌旁单独保存一个原始的数据格式
library(stringr)
group_list &lt;- ifelse(as.numeric(str_sub(matrix$entity_submitter_id,14,15))&lt;10,'tumor','normal')
table(group_list)
matrix_T &lt;- matrix
fwrite(matrix_T,&quot;../RawData/03.LIHC_clin_T.txt&quot;) # 肿瘤的txt格式
</code></pre>
<p>tcga癌旁是配对了癌组织,是一个人。所以一般只选择癌组织数据进行生存分析。</p>
页: [1]
查看完整版本: TCGA 临床数据的下载与整理