R語言文本合并
R語言中合并方式有很多畏腕,目前我常用的有兩種:
- 兩個(gè)文本對象有相同的行名岗照,通過行名的匹配進(jìn)行信息合并虏缸。#比較常用于將文件2的某幾列信息添加到文件1中良姆。
- 兩個(gè)文本對象通過相同的列用merge進(jìn)行合并讥脐,后面主要講解merge函數(shù)遭居。
文本讀取
首先我們先進(jìn)行文本的讀取啼器,常用的文本格式主要有txt/tsv(TAB分割,制表符)俱萍,csv(逗號分隔)端壳, xlsx(二進(jìn)制文件),前兩種R的自帶包即可讀取不用額外安裝R包枪蘑,但xlsx需要先安裝xlsx對應(yīng)的R包才能讀取损谦,下面主要對這三種格式進(jìn)行舉例。
#TAB分割文件可以通過read.delim()和read.table()讀取岳颇,讀取方式如下:
file1 <- read.delim(file="filename.txt", header=T, check.names=F, stringsAsFactors=F, row.names=1)
#header=T照捡,表示將讀進(jìn)來信息對象的第一行作為表頭,相同代碼也可以用head=1;
#check.names=F话侧,表示表頭是否調(diào)整栗精,如果是T/TRUE,第一行表頭中的 ’-/_/=‘ 等特殊字符會轉(zhuǎn)換成'.'
#如果文本中前幾列是不想要的內(nèi)容瞻鹏,可以用skip=2悲立,表示表過前兩行,那么第三行可能就作為表頭, 如果有注釋信息可以用comment.char="#"會自動(dòng)過濾開頭為#的行
#stringsAsFactors表示都進(jìn)來的每一列信息是否要因子話新博,因子這個(gè)概念比較復(fù)雜薪夕,如果理解不深刻,后續(xù)可能會有很多隱患赫悄,建議需要的時(shí)候再設(shè)定原献。
#row.names=1,表示第一類作為行名涩蜘,既然作行名嚼贡,就要求不允許有重復(fù)熏纯,否則報(bào)錯(cuò)同诫,不給此參數(shù)代表默認(rèn)行名1,2樟澜,3误窖,...
#以上參數(shù)可在多個(gè)文本讀取函數(shù)中使用,如read.table/read.csv.
####csv文本
file1 <- read.csv(file="filename.csv", header=T, check.names=F, stringsAsFactors=F, row.names=1)
####萬能讀取方式read.table
file1 <- read.table(file="filename.txt", sep="\t")
#sep="\t", 可以設(shè)定任意的分割方式秩贰,比如sep=","霹俺;sep="-"; sep=";" 需要注意的是xlsx不支持。
#sep="\t" 等價(jià)于read.delim(); sep="," 等價(jià)于read.csv(), \
#如果用了read.csv且參數(shù)加了sep=",",那么sep=","的任何設(shè)置都是無效的毒费,且程序會報(bào)warning(此warning無影響)
####xlsx表讀取
#EXCEL表是二進(jìn)制格式的丙唧,所以需要特定的包進(jìn)行解析,常見的包有xlsx觅玻,以此為例想际。
#xlsx包的安裝請參考:(http://www.reibang.com/p/0fbf7cc52413)
library(xlsx)
file1 <- read.xlsx(“filename.xlsx”,sheetIndex=1,startRow=1,endRow=100,colIndex=1:100,encoding = "UTF-8")
#sheetIndex=1,第幾個(gè)sheet表
#startRow=1,endRow=100,colIndex=1:100,都是用于控制sheet表中讀取的行列數(shù)目
文件合并
指定列合并:
#假如兩個(gè)文件有兩列是一致的培漏,且兩列列名均為gene 或分別為"gene","symbol";
combined <- merge(x=file1,y=file2,by="gene", all=L)
combined <- merge(x=file1,y=file2,by.x="gene",by.y="symbol",all=L)
#all=L表示兩個(gè)文件匹配不上的也會保留,且用NA填充胡本,如果只保留某一個(gè)文件的所有內(nèi)容可用all.x=T or all.y=T, "L"等價(jià)于兩者同時(shí)保留
按照信息匹配:
#假如兩個(gè)文件有同一屬性的列名牌柄,比如symbol,且需要將文件2中的log2FC根據(jù)symbol加入到文件1表達(dá)信息中
要求兩列需要有相同的行數(shù)和行名順序可不一致侧甫。
file1$log2FC <- file2[rownames(file1), 'log2FC']
limma差異分析
limma 文檔
limma同時(shí)支持芯片和測序數(shù)據(jù)珊佣。
limma基本原理
從limma教程來看limma僅支持read counts和CPM輸入進(jìn)行差異分析(ReadCounts/CPM/TPM/FPKM都是些啥東東,看這里)披粟,但有相關(guān)測試說TPM和ReadCounts的測試結(jié)果基本沒差轉(zhuǎn)錄組差異分析FPKM與count處理差別
咒锻,且有相關(guān)基于FPKM轉(zhuǎn)換為TPM后進(jìn)行差異分析的文章(Front. Mol. Neurosci. IF4.8)。從以上信息可知針對測序數(shù)據(jù)limma可以支持ReadCounts/CPM/TPM/FPKM進(jìn)行差異分析守屉,但嚴(yán)謹(jǐn)?shù)恼flimma僅支持前兩者虫碉。
以下為可參考的教程或文獻(xiàn):
- RPKM/FPKM/TPM探討歸一化概念的文獻(xiàn),文章(Theory in Biosciences IF1.1)
- FPKM和TMP相互轉(zhuǎn)換胸梆,TPM敦捧、RPKM與FPKM相互轉(zhuǎn)換R代碼 - 簡書 (jianshu.com)
- limma進(jìn)行差異分析,差異分析|使用limma包 - 簡書 (jianshu.com)