常常遇到有人問(wèn)起看到分享的教程導(dǎo)入數(shù)據(jù)的方式是data(dune)等直接調(diào)用系統(tǒng)的數(shù)據(jù),而自己怎么讀入自己的數(shù)據(jù)呢?
對(duì)于初學(xué)者來(lái)講,這確實(shí)是個(gè)問(wèn)題。如何準(zhǔn)備數(shù)據(jù)、拿到正確格式的數(shù)據(jù)并導(dǎo)入后續(xù)的代碼進(jìn)行分析,是學(xué)習(xí)和應(yīng)用過(guò)程中的第一個(gè)攔路虎。
為什么教程會(huì)習(xí)慣使用內(nèi)置數(shù)據(jù)?
但內(nèi)置數(shù)據(jù)的頻繁使用是導(dǎo)致初學(xué)者學(xué)習(xí)這個(gè)教程時(shí)經(jīng)常提出上面這個(gè)問(wèn)題的原因。
我不太贊成教程里面用使用內(nèi)置數(shù)據(jù),原因是:
如果要使用內(nèi)置數(shù)據(jù),也需要額外提供一些信息:
那假如教程沒有提供這么詳細(xì),自己又得用這個(gè)教程,怎么做呢?
自己如何根據(jù)教程的數(shù)據(jù)準(zhǔn)備并讀入自己的數(shù)據(jù)
1. 查看數(shù)據(jù)的結(jié)構(gòu),了解數(shù)據(jù)的構(gòu)成
既然教程提供了測(cè)試數(shù)據(jù)集,不妨仔細(xì)看看測(cè)試數(shù)據(jù)集的特征,沒準(zhǔn)就找著規(guī)律了。
我們以前面文章提到的dune數(shù)據(jù)集為例,查看下其結(jié)構(gòu)特征。
行名字是數(shù)字,列名字是字符串(如果我們對(duì)這些字符串不熟悉,對(duì)我們來(lái)說(shuō)就沒任何意義;每個(gè)字符都認(rèn)識(shí),串一起就不知道是啥了~~),中間的值是整數(shù)。除此外也看不出其它信息了。
library(vegan)data(dune)head(dune)## Achimill Agrostol Airaprae Alopgeni Anthodor Bellpere Bromhord Chenalbu Cirsarve Comapalu Eleopalu Elymrepe Empenigr## 1 1 0 0 0 0 0 0 0 0 0 0 4 0## 2 3 0 0 2 0 3 4 0 0 0 0 4 0## 3 0 4 0 7 0 2 0 0 0 0 0 4 0## 4 0 8 0 2 0 2 3 0 2 0 0 4 0## 5 2 0 0 0 4 2 2 0 0 0 0 4 0## 6 2 0 0 0 3 0 0 0 0 0 0 0 0## Hyporadi Juncarti Juncbufo Lolipere Planlanc Poaprat Poatriv Ranuflam Rumeacet Sagiproc Salirepe Scorautu Trifprat Trifrepe## 1 0 0 0 7 0 4 2 0 0 0 0 0 0 0## 2 0 0 0 5 0 4 7 0 0 0 0 5 0 5## 3 0 0 0 6 0 5 6 0 0 0 0 2 0 2## 4 0 0 0 5 0 4 5 0 0 5 0 2 0 1## 5 0 0 0 2 5 2 6 0 5 0 0 3 2 2## 6 0 0 0 6 5 3 4 0 6 0 0 3 5 5## Vicilath Bracruta Callcusp## 1 0 0 0## 2 0 0 0## 3 0 2 0## 4 0 2 0## 5 0 2 0## 6 0 6 0
2. 查看數(shù)據(jù)的幫助
從數(shù)據(jù)結(jié)構(gòu)和行列名字上得不到有用信息,那我們查看下幫助信息。
?dune
dune is a data frame of observations of 30 species at 20 sites. Thespecies names are abbreviated to 4+4 letters (see make.cepnames).
這告訴我們什么呢?這套數(shù)據(jù)包含了30個(gè)物種在20個(gè)樣品的豐度信息。從dim(dune)可以看出這是一個(gè)20行X30列的矩陣;可以推測(cè)出,每一行是一個(gè)樣品,每一列是一個(gè)物種(另一個(gè)佐證是列名字長(zhǎng)度確實(shí)為8個(gè)字符,與物種名字的4+4縮寫一致)。
注:如果對(duì)數(shù)據(jù)還有疑慮,建議谷歌下數(shù)據(jù)。常見內(nèi)置數(shù)據(jù)集都會(huì)有文章描述其信息,可用于佐證你的判斷。
dim(dune)## [1] 20 30
這個(gè)格式跟我們通常的OTU豐度表(我們的表通常是每一行是一個(gè)物種,每一列是一個(gè)樣品)略有不同。
3. 基本判斷后,讀入我們的數(shù)據(jù),做可能的轉(zhuǎn)換
如果我們有一個(gè)OTU豐度表,怎么讀入并轉(zhuǎn)成這個(gè)格式呢?
text <- "IDSamp1Samp2Samp3Samp4OTU12131415OTU21213810OTU322101411"otu_table <- read.table(text=text, sep="", row.names=1, header=T)
讀入OTU豐度表,第一行為列名字,第一列為行名字。
otu_table <- read.table("otutable_rare",sep="", row.names=1, header=T)
根據(jù)上面的分析做一個(gè)轉(zhuǎn)置,就可以獲得可用于后續(xù)分析的輸入數(shù)據(jù)了。
otu_table_t <- as.data.frame(t(otu_table))otu_table_t## OTU1 OTU2 OTU3## Samp1 2 12 22## Samp2 13 13 10## Samp3 14 8 14## Samp4 15 10 11
4. 示例數(shù)據(jù)中的整數(shù)代表什么意思?
這個(gè)是比較難確定的部分,只有兩個(gè)判斷方法:1)教程中作者能夠提及(這是最準(zhǔn)確的方法);2)憑經(jīng)驗(yàn)猜測(cè)。
這里涉及到另外一個(gè)經(jīng)常會(huì)被問(wèn)起的問(wèn)題:
我這一步操作需要提供原始數(shù)據(jù),還是標(biāo)準(zhǔn)化之后的數(shù)據(jù)?
絕大多數(shù)情況下,我們需要提供的都是標(biāo)準(zhǔn)化之后的在不同樣品之間可比的數(shù)據(jù)。因?yàn)椋?)我們的需求是比較不同樣品的差異,數(shù)據(jù)需要在樣品間可比;2)絕大部分工具是不會(huì)對(duì)數(shù)據(jù)做標(biāo)準(zhǔn)化處理的,要么直接用,要么做一些不影響數(shù)值關(guān)系的轉(zhuǎn)換;3)如果某個(gè)工具自己內(nèi)部會(huì)對(duì)數(shù)據(jù)做標(biāo)準(zhǔn)化,它一定會(huì)在幫助中提及,常見的比如DESeq2, edgeR、limma,除了這兩個(gè)半(limma算半個(gè),因?yàn)樗部梢越邮諛?biāo)準(zhǔn)化后的數(shù)據(jù)),一時(shí)想不起還有哪些工具是接受原始數(shù)據(jù)的。單細(xì)胞的Seurat包算是個(gè)例外,它內(nèi)部調(diào)用了一些標(biāo)準(zhǔn)化算法,可以通過(guò)參數(shù)關(guān)掉。
5. 查看更多教程,總會(huì)遇到有詳細(xì)描述所需數(shù)據(jù)結(jié)構(gòu)的教程。
6. 跟著感覺走,不管三七二十一讀進(jìn)來(lái)試試,出現(xiàn)異常或報(bào)錯(cuò)再調(diào)整。學(xué)程序不是做實(shí)驗(yàn),試錯(cuò)成本沒有那么大,光看不練是假把式,大膽試才是王道。
7. 最后一步,跟教程作者溝通。我們的教程問(wèn)題,歡迎在http://www.ehbio.com/Esx發(fā)帖討論;自己努力后,帶著問(wèn)題和思路的討論更容易獲得解答。