前期文章:
1. 在TCGA中找到并下載意向數(shù)據(jù)
2. TCGA: 如果不了解數(shù)據(jù),何以讀取數(shù)據(jù)?
前言
說起來前面真的有點犯傻,在讀取metaData和clinical之后,個人非常想要快點把表達量數(shù)據(jù)也讀取出來,于是在這兩個data里面找了半天也沒找到表達量counts,然后就放。。。放棄了。今天重新打開之后注意到一個叫做raw data的文件夾,等下?這不就是我之前下載的1222個數(shù)據(jù)嗎!前面還信誓旦旦的寫了2. TCGA: 如果不了解數(shù)據(jù),何以讀取數(shù)據(jù)?,現(xiàn)在就是活生生的例子,我果然不懂數(shù)據(jù),于是讀了個寂寞。
1. 數(shù)據(jù)到底在哪兒
數(shù)據(jù)存在raw data文件夾下,可以看到每個樣本都有獨立的文件夾,而文件夾內(nèi)只有一個.gz文件。

2. 數(shù)據(jù)長什么樣
那么我們該檢查一下.gz文件內(nèi)的data長什么樣,在windows中我們無法使用已有的軟件打開.gz文件,于是我們在該文件下右鍵調(diào)用Git Bash Here

調(diào)用Git Bash Here之后,使用代碼打開文件泳衣查閱,這里我的代碼是
zcat e30e547e-eeff-4a1f-829b-b6ec9e79f02a.htseq.counts.gz | less
## 使用less發(fā)現(xiàn)內(nèi)容太多,所以更改為head和tail檢查數(shù)據(jù)表頭和結(jié)尾。
zcat e30e547e-eeff-4a1f-829b-b6ec9e79f02a.htseq.counts.gz | head
zcat e30e547e-eeff-4a1f-829b-b6ec9e79f02a.htseq.counts.gz | tail
數(shù)據(jù)查閱結(jié)果如下,我們發(fā)現(xiàn)數(shù)據(jù)沒有表頭,第一列是ensemble ID,且已經(jīng)按照ensemble ID依次遞增排序的,對應的第二列則為表達量counts,表格結(jié)束后有幾句描述的話語,這應該不是我們想要讀到數(shù)據(jù)框內(nèi)的內(nèi)容。

3. 收集文件名用以作為數(shù)據(jù)框的表頭
檢查目前我們擁有的所有文件,使用代碼dir()列出當前文件夾下所有文件的名字。結(jié)合我們前面了解到的情況,每個樣本有單獨的文件夾,因此我們通過代碼dir()只能看到文件夾的名字,而真正文件的名字還是沒法看到,為此我們最好把所有的.gz文件移動到同一個文件夾下面,這里我是在Git Bash Here中使用代碼cp */*.gz ./

在各種翻閱數(shù)據(jù)后得知,文件名是file_name (例如:00a47e69-ef6a-4be9-827d-d48609859a7e.htseq.counts.gz),而TCGA樣本名叫做associated_entities(例如:aliquot, TCGA-AR-A1AS-01A-11R-A12P-07, e7b64cc3-9b2b-4938-9896-84b640d1586f, 7d681cc6-689d-41c8-9e84-e13733089ec9)。因此我們需要整理出一個file_name和TCGA樣本名的表格。
metadata<- fromJSON( file = "metadata.cart.2020-10-08.json",
method = "C",
unexpected.escape = "error",
simplify = TRUE )
# 使用dplyr的select()函數(shù)
# select() picks variables based on their names.
library(dplyr)
metadata_id <- metadata %>%
dplyr::select(c(file_name,associated_entities))
# 使用了管道符%>%


所以我們檢查metadata_id中哪一部分可以提取出TCGA ID
class(metadata_id[,2])
class(metadata_id[,2][1])
## 檢查第二列數(shù)據(jù)類型,發(fā)現(xiàn)為list中還包含著list
metadata_id[,2][[1]]$entity_submitter_id
## 通過各種檢查后發(fā)現(xiàn)entity_submitter_id是我們所要查找的TCGA ID
id_df <- data.frame() # 創(chuàng)建一個空的數(shù)據(jù)框
# 使用for循環(huán),將metadata_id中第一列作為數(shù)據(jù)框id_df的第一列;# metadata_id第二列的entity_submitter_id作為數(shù)據(jù)框id_df的第二列。

4. 讀取數(shù)據(jù)
自己寫代碼很復雜,推薦使用TCGAbiolinks完成。困了,下次接著寫。