TCGA-3.GDC數(shù)據(jù)整理-后續(xù)(含情感體驗)

書接第二回TCGA-2.GDC數(shù)據(jù)整理,留下了一個大坑,GDC下載的數(shù)據(jù)整理出來表達矩陣是缺少行名的。


手癢的我要動手了。

加行名并不容易,我搗鼓了好久啊。

思路

1.表達矩陣的行名應(yīng)該是TCGA的樣本id(id是行名還是列名無所謂啦,t()一個函數(shù)搞定)
2.要找到下載的mirna矩陣單個文件名和TCGA的樣本id的對應(yīng)關(guān)系(難難難哭了)

內(nèi)心掙扎思考記錄:
很堅定,這個對應(yīng)關(guān)系文件一定是存在的,否則沒有行名的表達是沒辦法分析的,gdc作為官方下載工具絕不可能沒救。

其次,這個對應(yīng)關(guān)系一定是一對一,表達矩陣是567行,id也應(yīng)該是567個,否則就會丟失數(shù)據(jù)。
所以這個對應(yīng)關(guān)系不在我們整理的xml信息里,因為xml只有522個病人的信息,567個樣本是因為有的病人既有tumor樣本又有normal樣本。

TCGA-biolinks也是基于gdc做了更多開發(fā),用它下載的表達矩陣就有行名,一個樣本都不少。所以這個對應(yīng)關(guān)系一定能從gdc網(wǎng)頁上找到。

嘗試

1.在gdc網(wǎng)頁樣本選擇頁面找


我把這個json下載下來研究了半天,也沒發(fā)現(xiàn)任何id的影子。

2.在其他地方各種搜啊找,折騰半天找不到。

我為什么一定要找到它?
此時我的心情已經(jīng)非常暴躁了,中午12點半了,都不想吃飯。雖然TCGA-biolinks能夠更方便的實現(xiàn),但它不是官方工具(萬一哪天。。。嗯),而且gdc我已經(jīng)學了,發(fā)兩篇筆記了,它又是官方玩法,干到一半不能撂挑子不管啊,我就是這么執(zhí)著的人。

3.藏在購物車里了

估計只有開上帝視角才能直接找到吧,全靠執(zhí)念。


把選出來的樣本全都加進購物車,點開購物車就會發(fā)現(xiàn),這里有一排下載按鈕。挨個下載了一下,發(fā)現(xiàn)metadata下載的就是一個json文件("metadata.cart.2020-01-08.json",自己從購物車下載即可),讀進R里就是567行!

開始進入R語言的表演

接下來的代碼是上一篇TCGA-2.GDC數(shù)據(jù)整理中的代碼為基礎(chǔ)繼續(xù)寫的,運行完上一篇的代碼接著運行這一篇的。

1.將json讀進R里并簡化

meta <- jsonlite::fromJSON("metadata.cart.2020-01-08.json")
colnames(meta)
# [1] "md5sum"                "data_type"             "file_name"             "file_size"            
# [5] "data_format"           "analysis"              "submitter_id"          "access"               
# [9] "state"                 "file_id"               "data_category"         "associated_entities"  
# [13] "experimental_strategy" "annotations" 
#找了大半天的TCGA-ID就在associated_entities里,說出來你可能不信,data.frame的一個格子里竟然可以裝列表,我今天也是第一次見。
entity <- meta$associated_entities
meta$associated_entities[[1]]
#                             entity_id                              case_id          entity_submitter_id
#1 81b91c93-e57c-4aa1-a19d-6b004ff539e7 75a0bb0b-6528-4fb8-a9e6-254905d21df4 TCGA-#MN-A4N1-01A-11H-A24S-13
#  entity_type
#1     aliquot
class(entity)
#[1] "list"
#可以看到這個列表的第三個元素就是tcgaid
jh = function(x){
  as.character(x[3])
}
jh(entity[[1]])
#[1] "TCGA-MN-A4N1-01A-11H-A24S-13"
ID = sapply(entity,jh)
options(stringsAsFactors = F)
file2id = data.frame(file_name = meta$file_name,
                     ID = ID)

上一篇用到的變量mis就是讀取文件的順序,和行名順序一致。

head(mis)
# [1] "00537534-e079-41dd-8cb9-ae1b0a27ad24/49d56cba-70c8-47a1-a890-9784ccfbb156.mirbase21.mirnas.quantification.txt"
# [2] "00c46e8b-f303-4d20-bd6d-d650c36895f5/af29b644-b3a8-455b-9f07-b956d41f6ec4.mirbase21.mirnas.quantification.txt"
# [3] "00fe6d87-6f9f-4818-8e9d-9672af400474/853e5acf-2710-4d13-989f-d977f5d3db51.mirbase21.mirnas.quantification.txt"
# [4] "0104295c-9b03-45c0-a598-36d9b788b450/bbb0a08f-8a93-420b-b96c-58bb3e07c9e6.mirbase21.mirnas.quantification.txt"
# [5] "0178f4cc-26db-47ce-8025-6fec60523991/33568f1e-8704-4ea5-948b-564057e5a36b.mirbase21.mirnas.quantification.txt"
# [6] "023b0bf9-3954-439b-8230-689e11ebd39a/9fb0324a-992d-4d1e-9f04-76d307ccb754.mirbase21.mirnas.quantification.txt"

mis2 = stringr::str_split(mis,"/",simplify = T)[,2]
mis2[1] %in% file2id$file_name
##[1] TRUE

下面涉及到一個比較繞的知識點,就是向量重排序,需要深入理解match函數(shù)了。詳見:http://www.itdecent.cn/p/335dcb2cd27a。

head(match(mis2,file2id$file_name))
## [1] 143 348 119 500 479  45
#排序可以驗證一下,match返回值的第一個是143,意思mis2的第一個元素是file2id$file_name的第143個元素。
mis2[1] == file2id$file_name[143]
##[1] TRUE
row_tcga = file2id[match(mis2,file2id$file_name),]
rownames(mi_df) = row_tcga$ID
mi_df[1:4,1:4]
##                             hsa-let-7a-1 hsa-let-7a-2 hsa-let-7a-3 hsa-let-7b
## TCGA-MN-A4N4-01A-12H-A24S-13        43563        44020        43680      65476
## TCGA-55-7816-01A-11H-2169-13        75848        75451        75769      54045
## TCGA-78-7160-01A-11H-2038-13        56189        56527        56437      44829
## TCGA-05-4382-01A-01T-1207-13         7956         7951         7834      15317

就只是加個行名,背后需要強大的R語言功底和必勝的信念(手動狗頭)。
微信公眾號生信星球同步更新我的文章,歡迎大家掃碼關(guān)注!


我們有為生信初學者準備的學習小組,點擊查看??
想要參加我的線上線下課程,也可加好友咨詢??
如果需要提問,請先看生信星球答疑公告

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容