小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

把GDC下載的多個(gè)TCGA文件批量讀入R

 yjt2004us 2019-01-23

多個(gè)單獨(dú)文件合并到單一文件夾

但是下載是一個(gè)個(gè)壓縮文件,更要命的是,這些壓縮文件還藏在一個(gè)個(gè)單獨(dú)的文件夾中。

我在以前的一個(gè)帖子里講述了,如何把這些壓縮文件放在同一個(gè)文件夾中。
TCGA提取非編碼RNA并完成下游分析

直覺(jué)告訴我們,一個(gè)個(gè)復(fù)制粘貼是可行的。對(duì)!有時(shí)候我們就是要憑著自己的直覺(jué)做事,這一次我們用更加簡(jiǎn)單的代碼來(lái)實(shí)現(xiàn)這個(gè)功能(文末有免費(fèi)操作視頻)。

首先所有的原始數(shù)據(jù)存在rawdata這個(gè)文件夾中,我們現(xiàn)在創(chuàng)建一個(gè)新的文件夾叫data_in_one,用來(lái)存放所有的壓縮文件。

dir.create('data_in_one')

如果要用for循環(huán)來(lái)做這個(gè)事情,訣竅只有一個(gè):

你要清晰地定義,如何做一件事,你能做一件事,就能做多件事。

實(shí)現(xiàn)一個(gè),很簡(jiǎn)單

  • 1. 打開rawdata下面的第一個(gè)文件夾

  • 2. 找到該文件夾下面的壓縮文件

  • 3. 復(fù)制粘貼到新的文件夾data_in_one中

好了,根據(jù)這個(gè)思路,我們順利地寫出了這個(gè)循環(huán)

for (dirname in dir('rawdata/')){  
  ## 使用list.files函數(shù)找到rawdata里面單個(gè)文件夾下面的壓縮文件
  file <- list.files(paste0(getwd(),'/rawdata/',dirname),pattern = '*.counts')  #找到對(duì)應(yīng)文件夾中的內(nèi)容,pattern可以是正則表達(dá)式
  ## 使用file.copy函數(shù)復(fù)制粘貼壓縮文件到data_in_one
  file.copy(paste0(getwd(),'/rawdata/',dirname,'/',file),'data_in_one')  #復(fù)制內(nèi)容到新的文件夾
}

很快,所有的文件被復(fù)制到了新的文件夾,在我的電腦上用時(shí)1秒,很爽!

接下來(lái)就好辦了,我們批量把這個(gè)數(shù)據(jù)讀入R語(yǔ)言即可,但是問(wèn)題是,TCGA數(shù)據(jù)是有TCGA barcode的,類似于下面這個(gè):

'TCGA-06-0138-01A-02R-1849-01'

但是我們現(xiàn)在只有這樣的文件名

'76c6e110-9a94-4fcf-a534-a21ba4698f86.htseq.counts.gz'

如果就這樣把數(shù)據(jù)讀入R,我們會(huì)分不清樣本間的區(qū)別,無(wú)法進(jìn)行下游分組操作。
所以,現(xiàn)在要找到文件名稱和TCGA id之間的對(duì)應(yīng)關(guān)系。

找出文件名對(duì)應(yīng)的TCGA id

這個(gè)對(duì)應(yīng)關(guān)系在上次下載的metadata文件中,這個(gè)文件是json格式的,很復(fù)雜,需要專門的函數(shù)讀取,我對(duì)比了好幾種函數(shù),發(fā)現(xiàn)jsonlite中的fromJSON函數(shù)是最好的。

metadata <- jsonlite::fromJSON('metadata.cart.2019-01-14.json')

我們?cè)儆胒or循環(huán)提取對(duì)應(yīng)的兩者對(duì)應(yīng)關(guān)系

naid_df <- data.frame()
for (i in 1:nrow(metadata)){
  naid_df[i,1] <- metadata$file_name[i]
  naid_df[i,2] <- metadata$associated_entities[i][[1]]$entity_submitter_id
}
colnames(naid_df) <- c('filename','TCGA_id')

速度很快,效果不錯(cuò)

批量讀取數(shù)據(jù)

現(xiàn)在我們可以放心地讀取文件了,在以前,我喜歡把他們解壓縮了再讀取,但是洲跟提醒我R語(yǔ)言可以直接讀取gz壓縮文件,那就好辦了,先讀一個(gè)試試效果

test <- data.table::fread(paste0('data_in_one/',naid_df$filename[1]))

數(shù)據(jù)有兩列,一列是ensemble id,一列是對(duì)應(yīng)基因的counts數(shù)目。

那么接下來(lái)的思路是,我先創(chuàng)建一個(gè)大的數(shù)據(jù)框,然后把每次讀取出來(lái)的第二列數(shù)據(jù)變成一列即可。

expr_df <- data.frame(matrix(NA,nrow(test),nrow(naid_df)))

for (i in 1:nrow(naid_df)) {
  print(i)
  expr_df[,i]= data.table::fread(paste0('data_in_one/',naid_df$filename[i]))[,2]
}

給讀入的數(shù)據(jù)添加列名和基因名稱

每一個(gè)文件讀取時(shí)都對(duì)應(yīng)了一個(gè)TCGA id,所以用對(duì)應(yīng)的TCGA id 給獲得的數(shù)據(jù)命名即可

colnames(expr_df) <- naid_df$TCGA_id

讀取任意單個(gè)文件,把他的第一列合并到大的數(shù)據(jù)框上,作為基因名稱

gene_id <- data.table::fread(paste0('data_in_one/',naid_df$filename[1]))$V1
expr_df <- cbind(gene_id=gene_id,expr_df)

去除后5行,保存數(shù)據(jù)成Rdata格式

這個(gè)時(shí)坑,只有自己掉進(jìn)去才知道,最后5行不是我們需要的,可以用tail這個(gè)函數(shù)查看

tail(expr_df$gene_id,10)

去除最后5行

expr_df <- expr_df[1:(nrow(expr_df)-5),]

看一下現(xiàn)在的數(shù)據(jù)

保持?jǐn)?shù)據(jù)為Rdata格式

save(expr_df,file = 'expr_df.Rdata')

以后要用的時(shí)候,load一下即可。

load(file = 'expr_df.Rdata')

好了,打完收工,下次我們?cè)賮?lái)講基于這個(gè)數(shù)據(jù)的差異分析以及如何標(biāo)準(zhǔn)化。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多