1. 程式人生 > 其它 >生物資訊學技能面試題(第4題)-多個同樣的行列式檔案合併起來

生物資訊學技能面試題(第4題)-多個同樣的行列式檔案合併起來

相信用過htseq-count的朋友都知道,它是分開對每個樣本計算所有的基因表達量,所以會生成一個個獨立的檔案,我用perl指令碼模仿它的結果如下:

$ head a.txt gene_1 178 gene_2 692 gene_3 486 gene_4 666 gene_5 395 gene_6 48 gene_7 926 gene_8 733 gene_9 660 gene_10 578

第一列是基因,第二列是該基因的counts值,共有a~z這26個樣本的counts檔案,需要合併成一個大的行列式,這樣才能匯入到R裡面做差異分析,如果手工用excel表格做,當然是可以的,但是太麻煩,如果有500個樣本,正常人都不會去手工做了,需要程式設計。 生成測試檔案的程式碼如下:

#首先新建檔案tmp.sh 輸入這個程式碼:

perl -le '{print "gene_$_t".int(rand(1000)) foreach 1..99}'

## 然後用perl指令碼呼叫這個tmp.sh檔案:

perl -e 'system(" bash tmp.sh >$_.txt") foreach a..z'

##這樣就生成了a~z這26個樣本的counts檔案

用shell或者perl或者python,設定R語言都可以做,但是各有優缺點,而且如果每個樣本的基因順序並不一致,這時候你應該怎麼做呢? 實際需求如下:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE48213

裡面有56個檔案(ftp://ftp.ncbi.nlm.nih.gov/geo/s ... pl/GSE48213_RAW.tar),需要合併成一個表達矩陣,來根據cell-line的不同,分組做差異分析。 paper是:https://www.ncbi.nlm.nih.gov/pubmed/24176112 輸出的表達矩陣,如下所示:

先給一下shell結合R語言的做法:

## 首先在GSE48213_RAW目錄裡面生成tmp.txt檔案

awk '{print FILENAME"t"$0}' * |grep -v EnsEMBL_Gene_ID >tmp.txt

## 然後把tmp.txt匯入R語言裡面用reshape2處理即可!

setwd('tmp/GSE48213_RAW/')

a=read.table('tmp.txt',sep = 't',stringsAsFactors = F)

library(reshape2)

fpkm <- dcast(a,formula = V2~V1)