聽(tīng)說(shuō)你想要TCGA的miRNA表達(dá)數(shù)據(jù)

以前都是直接拿前體數(shù)據(jù)去處理肋殴,今天偶然在群里看到,想用isform做一下試試坦弟。我非常喜歡gdc-client這個(gè)官方下載工具,它的數(shù)據(jù)以樣本的方式組織护锤,優(yōu)點(diǎn)是可以隨便組和,缺點(diǎn)是需要后期批量讀取和整理酿傍,代碼難度大烙懦。無(wú)所謂啦,習(xí)慣了都一樣赤炒。

日常小記:我8月22號(hào)講完了線上課氯析,趁現(xiàn)在疫情已經(jīng)穩(wěn)定了亏较,我趕緊一張機(jī)票把自己鏟回了老家。目前處于爸媽愛(ài)不釋手期(應(yīng)該是過(guò)幾天才會(huì)開始被嫌棄)掩缓。這一篇推文我寫了不到一個(gè)半小時(shí)雪情,被投喂了四次,一次是二姨家的玉米你辣,一次是鄰居家的大桃子巡通,一次是家門口中的葡萄,就在寫這段話的時(shí)候麻麻又去商店拎回來(lái)一箱牛奶哈哈哈哈

正文開始舍哄!

1.從網(wǎng)頁(yè)選擇數(shù)據(jù)宴凉,下載manifest文件

參考(本來(lái)這里應(yīng)該有個(gè)鏈接,但是被封了表悬,沒(méi)了弥锄,去國(guó)民聊天軟件搜生信星球看吧),選擇file的時(shí)候找到miRNAseq的isform數(shù)據(jù)即可签孔。

2.使用gdc-client工具下載

注意

將gdc-client(mac)或gdc-client.exe(windows)放在工作目錄下叉讥;

將manifest文件放在工作目錄下。

library(stringr)
if(!dir.exists("expdata"))dir.create("expdata")
dir()
#> [1] "1_gdc-client.html"            
#> [2] "1_gdc-client.Rmd"             
#> [3] "clinical"                     
#> [4] "expdata"                      
#> [5] "gdc-client.exe"               
#> [6] "gdc_manifest.2021-08-22.txt"  
#> [7] "metadata.cart.2021-08-24.json"
#> [8] "tcga_1.Rproj"
## 這句下載的代碼要在terminal運(yùn)行
#./gdc-client.exe download -m gdc_manifest.2021-08-22.txt -d expdata

length(dir("./expdata/"))
#> [1] 45

可以看到饥追,下載的文件是按樣本存放的图仓,我們需要得到的是表格,需要將他們批量讀入R語(yǔ)言并整理但绕。

3.整理表達(dá)矩陣

探索數(shù)據(jù):先任選兩個(gè)counts文件讀取救崔,并觀察geneid的順序是否一致。

library(tidyverse)
x = read.table("expdata/0cbb843b-c6d4-4ad8-8678-6df63074d1a0/40a39e83-23c6-4240-a1a0-ddf221f23103.mirbase21.isoforms.quantification.txt",sep = "\t",header = T) 
head(x)
#>       miRNA_ID                isoform_coords
#> 1 hsa-let-7a-1 hg38:chr9:94175961-94175982:+
#> 2 hsa-let-7a-1 hg38:chr9:94175961-94175983:+
#> 3 hsa-let-7a-1 hg38:chr9:94175961-94175984:+
#> 4 hsa-let-7a-1 hg38:chr9:94175962-94175981:+
#> 5 hsa-let-7a-1 hg38:chr9:94175962-94175982:+
#> 6 hsa-let-7a-1 hg38:chr9:94175962-94175983:+
#>   read_count reads_per_million_miRNA_mapped
#> 1          5                       0.756391
#> 2          7                       1.058948
#> 3         12                       1.815339
#> 4        302                      45.686022
#> 5      12255                    1853.914558
#> 6      15830                    2394.734187
#>   cross.mapped        miRNA_region
#> 1            N mature,MIMAT0000062
#> 2            N mature,MIMAT0000062
#> 3            N mature,MIMAT0000062
#> 4            N mature,MIMAT0000062
#> 5            N mature,MIMAT0000062
#> 6            N mature,MIMAT0000062

可見(jiàn)這個(gè)數(shù)據(jù)里不只有count數(shù)據(jù)捏顺,還有前體和成熟體的id六孵,而且還是分了區(qū)間。接下來(lái)需要:

  • 只要成熟體id和count兩列
  • 按照成熟體分組求和幅骄,得出每個(gè)成熟體的count之和

一個(gè)文件整理成功后劫窒,對(duì)所有的樣本文件批量做相同的處理

x2 = x %>%
  dplyr::select(c(6,3)) %>% 
  group_by(miRNA_region) %>% 
  summarise(read_count = sum(read_count))

count_files = dir("expdata/",pattern = "*isoforms.quantification.txt$",recursive = T)

exp = list()
for(i in 1:length(count_files)){
  exp[[i]] <- read.table(paste0("expdata/",count_files[[i]]),sep = "\t",header = T) %>%
  dplyr::select(c(6,3)) %>% 
  group_by(miRNA_region) %>% 
  summarise(read_count = sum(read_count)) 
}
sapply(exp, nrow)
#>  [1] 650 828 799 791 805 725 778 783 751 781 703 780
#> [13] 757 767 731 800 714 781 722 749 777 795 735 828
#> [25] 832 760 805 911 629 719 765 733 801 825 839 924
#> [37] 730 815 710 740 776 788 711 908 832

檢查發(fā)現(xiàn),每個(gè)文件都進(jìn)來(lái)的數(shù)據(jù)拆座,它的行數(shù)(也就是miRNA成熟體的個(gè)數(shù))是不一樣多的主巍。

所以就不能cbind了,Resuce配merge挪凑,空著的地方會(huì)填充上NA孕索,給他改成0即可。

另躏碳,最后三行需要去掉搞旭,不是表達(dá)矩陣矩陣正式內(nèi)容。

m = Reduce(function(x, y) merge(x, y, by= 'miRNA_region',all = T), exp)
m[is.na(m)]=0
exp <- column_to_rownames(m,var = "miRNA_region")
exp = exp[-((nrow(exp)-2):nrow(exp)),]
dim(exp)
#> [1] 1753   45
exp[1:4,1:4]
#>                     read_count.x read_count.y
#> mature,MIMAT0000062        27647       167773
#> mature,MIMAT0000063        15016       122311
#> mature,MIMAT0000064         1196        10586
#> mature,MIMAT0000065          194         1521
#>                     read_count.x.1 read_count.y.1
#> mature,MIMAT0000062         183894         152801
#> mature,MIMAT0000063         206980         106415
#> mature,MIMAT0000064          13853          10759
#> mature,MIMAT0000065            912            978

4.行名轉(zhuǎn)換

行名里的前綴"mature"可以去掉。MIM開頭的是mirBase數(shù)據(jù)庫(kù)里的id肄渗,需要轉(zhuǎn)換為大多以hsa-miR開頭的成熟體id镇眷。

GDC數(shù)據(jù)庫(kù)使用的mirBasev21版本的id,我們轉(zhuǎn)換時(shí)需要使用相同的版本,使用miRBaseVersions.db包更絲滑

table(str_detect(rownames(exp),"mature,"))
#> 
#> TRUE 
#> 1753
rownames(exp) = str_remove(rownames(exp),"mature,")
library(miRBaseVersions.db)
mh <- select(miRBaseVersions.db,
               keys = rownames(exp),
               keytype = "MIMAT",
               columns = c("ACCESSION","NAME","VERSION"))
head(mh)
#>      ACCESSION          NAME VERSION
#> 1 MIMAT0000062 hsa-let-7a-5p      22
#> 2 MIMAT0000063 hsa-let-7b-5p      22
#> 3 MIMAT0000064 hsa-let-7c-5p      22
#> 4 MIMAT0000065 hsa-let-7d-5p      22
#> 5 MIMAT0000066 hsa-let-7e-5p      22
#> 6 MIMAT0000067 hsa-let-7f-5p      22
mh = mh[mh$VERSION=="21",]
mh = mh[match(rownames(exp),mh$ACCESSION),]
identical(rownames(exp),mh$ACCESSION)
#> [1] TRUE
table(!duplicated(mh$NAME))
#> 
#> TRUE 
#> 1753
rownames(exp) = mh$NAME
exp[1:4,1:4]
#>               read_count.x read_count.y
#> hsa-let-7a-5p        27647       167773
#> hsa-let-7b-5p        15016       122311
#> hsa-let-7c-5p         1196        10586
#> hsa-let-7d-5p          194         1521
#>               read_count.x.1 read_count.y.1
#> hsa-let-7a-5p         183894         152801
#> hsa-let-7b-5p         206980         106415
#> hsa-let-7c-5p          13853          10759
#> hsa-let-7d-5p            912            978

經(jīng)過(guò)這一圈折騰恳啥,終于得到一個(gè)正常行名的表達(dá)矩陣?yán)财印N冶容^了一下成熟體和前體id的差別和聯(lián)系,如下:

x = read.table("expdata/0cbb843b-c6d4-4ad8-8678-6df63074d1a0/40a39e83-23c6-4240-a1a0-ddf221f23103.mirbase21.isoforms.quantification.txt",sep = "\t",header = T) %>%
  dplyr::select(c(6,1)) %>% 
  distinct()
x$miRNA_region = str_remove(x$miRNA_region,"mature,")
x = merge(x,mh,by.x = "miRNA_region",by.y = "ACCESSION")  
head(x)
#>   miRNA_region     miRNA_ID          NAME VERSION
#> 1 MIMAT0000062 hsa-let-7a-3 hsa-let-7a-5p      21
#> 2 MIMAT0000062 hsa-let-7a-2 hsa-let-7a-5p      21
#> 3 MIMAT0000062 hsa-let-7a-1 hsa-let-7a-5p      21
#> 4 MIMAT0000063   hsa-let-7b hsa-let-7b-5p      21
#> 5 MIMAT0000064   hsa-let-7c hsa-let-7c-5p      21
#> 6 MIMAT0000065   hsa-let-7d hsa-let-7d-5p      21

5.列名轉(zhuǎn)換

這個(gè)仍然是參考之前的鏈接(http://www.reibang.com/p/af9b257c8a20)钝的,難得啊沒(méi)給我封了翁垂。

meta <- jsonlite::fromJSON("metadata.cart.2021-08-24.json")
ID = sapply(meta$associated_entities,
            function(x){x$entity_submitter_id})
file2id = data.frame(file_name = meta$file_name,
                     ID = ID)
count_files2 = stringr::str_split(count_files,"/",simplify = T)[,2]
file2id = file2id[match(count_files2,file2id$file_name),]
colnames(exp) = file2id$ID
exp[1:4,1:4]
#>               TCGA-W5-AA2O-01A-11R-A41D-13
#> hsa-let-7a-5p                        27647
#> hsa-let-7b-5p                        15016
#> hsa-let-7c-5p                         1196
#> hsa-let-7d-5p                          194
#>               TCGA-4G-AAZT-01A-11R-A41D-13
#> hsa-let-7a-5p                       167773
#> hsa-let-7b-5p                       122311
#> hsa-let-7c-5p                        10586
#> hsa-let-7d-5p                         1521
#>               TCGA-ZH-A8Y1-01A-11R-A41D-13
#> hsa-let-7a-5p                       183894
#> hsa-let-7b-5p                       206980
#> hsa-let-7c-5p                        13853
#> hsa-let-7d-5p                          912
#>               TCGA-YR-A95A-01A-12R-A41D-13
#> hsa-let-7a-5p                       152801
#> hsa-let-7b-5p                       106415
#> hsa-let-7c-5p                        10759
#> hsa-let-7d-5p                          978

6.表達(dá)矩陣的過(guò)濾

表達(dá)矩陣整理完成,需要過(guò)濾一下那些在很多樣本里表達(dá)量都為0的基因。過(guò)濾標(biāo)準(zhǔn)不唯一硝桩。

dim(exp)
#> [1] 1753   45
#exp = exp[rowSums(exp)>0,]
k = apply(exp, 1, function(x) sum(x > 0) > 9);table(k)
#> k
#> FALSE  TRUE 
#>   802   951
exp = exp[k,]
dim(exp)
#> [1] 951  45
exp[1:4,1:4]
#>               TCGA-W5-AA2O-01A-11R-A41D-13
#> hsa-let-7a-5p                        27647
#> hsa-let-7b-5p                        15016
#> hsa-let-7c-5p                         1196
#> hsa-let-7d-5p                          194
#>               TCGA-4G-AAZT-01A-11R-A41D-13
#> hsa-let-7a-5p                       167773
#> hsa-let-7b-5p                       122311
#> hsa-let-7c-5p                        10586
#> hsa-let-7d-5p                         1521
#>               TCGA-ZH-A8Y1-01A-11R-A41D-13
#> hsa-let-7a-5p                       183894
#> hsa-let-7b-5p                       206980
#> hsa-let-7c-5p                        13853
#> hsa-let-7d-5p                          912
#>               TCGA-YR-A95A-01A-12R-A41D-13
#> hsa-let-7a-5p                       152801
#> hsa-let-7b-5p                       106415
#> hsa-let-7c-5p                        10759
#> hsa-let-7d-5p                          978
exp = as.matrix(exp)

大功告成咯~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沿猜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碗脊,更是在濱河造成了極大的恐慌啼肩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衙伶,死亡現(xiàn)場(chǎng)離奇詭異祈坠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)矢劲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門赦拘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人芬沉,你說(shuō)我怎么就攤上這事躺同。” “怎么了丸逸?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蹋艺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我黄刚,道長(zhǎng)捎谨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任憔维,我火速辦了婚禮侍芝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘埋同。我一直安慰自己,他們只是感情好棵红,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布凶赁。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虱肄。 梳的紋絲不亂的頭發(fā)上致板,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音咏窿,去河邊找鬼斟或。 笑死,一個(gè)胖子當(dāng)著我的面吹牛集嵌,可吹牛的內(nèi)容都是我干的萝挤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼根欧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怜珍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凤粗,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酥泛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嫌拣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柔袁,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年异逐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捶索。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡应役,死狀恐怖情组,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箩祥,我是刑警寧澤院崇,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站袍祖,受9級(jí)特大地震影響底瓣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蕉陋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一捐凭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凳鬓,春花似錦茁肠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)匹颤。三九已至,卻和暖如春托猩,著一層夾襖步出監(jiān)牢的瞬間印蓖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工京腥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赦肃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓公浪,卻偏偏與公主長(zhǎng)得像他宛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子因悲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容