多個(gè)單獨(dú)文件合并到單一文件夾但是下載是一個(gè)個(gè)壓縮文件,更要命的是,這些壓縮文件還藏在一個(gè)個(gè)單獨(dú)的文件夾中。 我在以前的一個(gè)帖子里講述了,如何把這些壓縮文件放在同一個(gè)文件夾中。 直覺(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)單
好了,根據(jù)這個(gè)思路,我們順利地寫出了這個(gè)循環(huán) 很快,所有的文件被復(fù)制到了新的文件夾,在我的電腦上用時(shí)1秒,很爽! 接下來(lái)就好辦了,我們批量把這個(gè)數(shù)據(jù)讀入R語(yǔ)言即可,但是問(wèn)題是,TCGA數(shù)據(jù)是有TCGA barcode的,類似于下面這個(gè):
但是我們現(xiàn)在只有這樣的文件名
如果就這樣把數(shù)據(jù)讀入R,我們會(huì)分不清樣本間的區(qū)別,無(wú)法進(jì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)系 速度很快,效果不錯(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ù)變成一列即可。 給讀入的數(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ù)框上,作為基因名稱 去除后5行,保存數(shù)據(jù)成Rdata格式這個(gè)時(shí)坑,只有自己掉進(jìn)去才知道,最后5行不是我們需要的,可以用tail這個(gè)函數(shù)查看 tail(expr_df$gene_id,10)去除最后5行 看一下現(xiàn)在的數(shù)據(jù) 保持?jǐn)?shù)據(jù)為Rdata格式 save(expr_df,file = 'expr_df.Rdata')以后要用的時(shí)候,load一下即可。 好了,打完收工,下次我們?cè)賮?lái)講基于這個(gè)數(shù)據(jù)的差異分析以及如何標(biāo)準(zhǔn)化。 |
|
|