
持續(xù)更新ing.....
最后更新時(shí)間:2019/3/8 10:28 AM
1.linux命令
1.1 linux的權(quán)限
權(quán)限:
| 權(quán)限 | 意義 | 分?jǐn)?shù)權(quán)制 |
|---|---|---|
| w | 寫 | 4 |
| r | 讀 | 2 |
| x | 執(zhí)行 | 1 |
eg: 7=4+2+1 #代表w+r+x權(quán)限
1.2 幫助文件
man(詳細(xì)講解)和--help(使用語法簡介)
1.3 目錄操作
ls -r #反序排列
ls -sh # 顯示目錄文件大小
ls -d a* #查看以a開頭的目錄或文件
cd ~ #切換到當(dāng)前用戶目錄
cd - #切換到上一次進(jìn)入目錄
mkdir #創(chuàng)建空目錄
mkdir -p #創(chuàng)建多級目錄
rmdir -p #刪除空目錄
touch #創(chuàng)建文件
rm -r #刪除目錄及目錄下文件
1.4 文件操作
cp #復(fù)制文件
cp -r #復(fù)制目錄及目錄中的文件
mv #移動/重命名 文件/目錄:如果輸入目錄和輸出目錄一樣則是改名字。
1.5 文件編輯
1.5.1 VI編輯器
- 底行模式
set nu:列出行號
/ charactor:查找字符
wq:寫入并退出
q1:強(qiáng)制退出,不會保存修改
cat #查看文件內(nèi)容,一次性輸出
cat 1.txt > 2.txt #1.txt 文件內(nèi)容取代2.txt文件
cat 1.txt >> 2.txt # 1.txt 文件插入2.txt文件末尾
1.5.2 less/more
less / more #分頁查看文件內(nèi)容
less -m #顯示百分比
less -N #顯示行號
/charactor #查看模式下,向下查找字符。向上是 ?character
b #查看模式下下一頁,下半頁是d
less -mN
1.5.3 wc/head
head / tail #查看文件的頭部/ 尾部
wc # 顯示文件行數(shù)、字?jǐn)?shù)
wc -l <file> #輸出文件行數(shù)
wc -c <file> #輸出文件字節(jié)數(shù)
wc -w <file> #輸出文件字節(jié)數(shù)
wc -L <file> #輸出文件最長的一行
ls |wc -l #文件下有多少文件和目錄

1.5.4 grep
grep <str> #文件查找,并輸出匹配行
grep -c <str> #輸出有幾行匹配上了
grep -i <str> #不區(qū)分大小寫
grep -n <str> #顯示匹配行及其行數(shù)
grep -v <str> #不顯示匹配行
grep --color #檢索詞加顏色,可以和-i -n 等一起用
grep -n --color "the" 2.txt #結(jié)果如下
grep "t[ea]st" 2.txt #匹配test 或者tast
grep ^or$ #匹配行首或者行尾
grep [^a]n #匹配除an外含有n的行
grep ^[TI] #匹配以T或者I開頭的行
grep ^[^a-zA-Z] #不匹配字母開始的行
1.5.5 sort
sort -n #依據(jù)數(shù)值大小排序
sort -0 <file> #排序結(jié)果存入制定文件
sort -r #反序排列
sort -k #以哪個(gè)區(qū)間排列
sort -c #檢查文件是否按照序列排序
cat file1 file2 | sort | uniq > file3 #兩文件并集
cat file1 file2 | sort | uniq -d > file3 #兩文件交集
cat file1 file2 | sort | uniq -u > file3 #刪除交集,留下各自補(bǔ)集
1.5.6 sed
sed -n #列出經(jīng)過sed處理過的一行
sed -e #直接在命令行模式進(jìn)行sed動作編輯
sed -i #直接對原文編輯
sed [參數(shù)] 'comand' 輸入源文本
sed -n '1~2 p' a.txt #a.txt第一行起始,2行為步長輸出到屏幕(P)。奇數(shù)行。
sed -n '1,+2 p' a.txt #a.txt第一行起始,起始行后的連續(xù)+2行。即前三行。
sed -n '/primary_transcript/,+4 p' genome.gff #包含 primary_transcript 字符文本的一行及其后4行。
sed '1,3 s/e/E/g' a.txt #對1-3行進(jìn)行e到E的替換
sed -e '1~2 d' a.txt #刪除奇數(shù)行
sed -e '1,/^chr3/ d' a.txt #定位:從1行開始到以chr3開頭到行。操作:刪除
sed '^$ d' a.txt #定位:空白行。操作:刪除
sed '2 a AT3GGO5780 GO:0000167' a.txt #定位:第二行。操作:在第二行后追加一行。(在第二行之前是i)
1.5.6.1 sed的定位
- sed 第一行表示:
1 - 最后一行表示:
$ - 正則匹配:
/REGEXP/ - 步長處理:
first~step - 選擇選定行和后面幾行:
addr,+N
1.5.6.2 sed的正則表達(dá)
1.5.6.3 sed的操作命令**
- a 在當(dāng)前后添加一行
- i 在當(dāng)前行前添加一行
- d 刪除行
- g 取緩存空間覆蓋原有內(nèi)容
- p 打印行
- ! 對選擇之外對行執(zhí)行sed
- s 字符串替換
1.5.7 cut
cut -c 2-4 2.txt #2.txt文件每行第2-4共三個(gè)字符截取
cut -d '-' -f 2 2.txt #2.txt文件以“-”為分割制表,每行第二列輸出.-d '<charactor>'是指定分割符。默認(rèn)是tab鍵
在linux的shell中“tab”鍵表達(dá)方式是<kbd>control</kbd>+<kbd>V</kbd>+<kbd>I</kbd>
1.5.8 文件操作-正則表達(dá)
- 行首定位符:
^:ls | grep "^Green";grep "^RBM4" 2.txt - 行為定位符:
$:ls | grep "1$" - 限定符:
*:前面字符出現(xiàn)0次或多次。>=0
+:前面字符出現(xiàn)1次或多次。>=1
?:前面字符出現(xiàn)0次或一次。=0 OR =1 - 字符集:
[ ]:任意一個(gè)字符,數(shù)字和字母之間可用-連接表示范圍。[abc];[0-9];[a-z];[a-zA-Z]。(a | b | c) = [abc]。
[^ ]: 字符非匹配。[^abc]不匹配a|b|c任意一個(gè)。
正則表達(dá)練習(xí)網(wǎng)站:https://regexr.com/
━┉┉┉┉∞┉┉┉┉━━┉┉┉┉∞┉┉┉┉━━┉┉┉┉∞┉┉┉┉━━┉
●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞
2. 測序結(jié)果的比對定量
2.1 比對原理的介紹
2.1.1 BWT算法學(xué)習(xí)
需要進(jìn)一步深入學(xué)習(xí)
2.1.2 hisat2軟件優(yōu)勢
速度比較快,準(zhǔn)確率高。
2.2 bowtie2和hisat2的使用
2.2.1索引構(gòu)建
hisat2-build Escherichia_coli.fa ./Escherichia_coli
#hisat2對大腸桿菌基因組進(jìn)行索引構(gòu)建
bowtie2-build Escherichia_coli.fa ./Escherichia_coli
#bowtie2對大腸桿菌基因組進(jìn)行索引構(gòu)建
2.2.2進(jìn)行比對
hisat2 -x Escherichia_coli -1 E_coli_1.test.clean.fq.gz -2 E_coli_2.test.clean.fq.gz --un-conc-gz ./E_coli_bowtie_unmap.fq.gz 2 > ./E_coli_bowtie_align.log | samtools sort -O BAM --threads 4 -o ./E_coli_bowtie_.bam
# -x 指定基因組索引
# -1 / -2 雙端測序文件
# --un-conc-gz 將沒有匹配的序列存儲到文件
# > 將結(jié)果輸出到log文件
# -O FORMAT 設(shè)置最終輸出的文件格式,可以是bam,sam或者cram,默認(rèn)為bam
# -o 設(shè)置最后的文件名
# --threads 設(shè)置線程數(shù)
bowtie2 -x Escherichia_coli -1 E_coli_1.test.clean.fq.gz -2 E_coli_2.test.clean.fq.gz --un-conc-gz ./E_coli_hisat_unmap.fq.gz 2> ./E_coli_hisat_align.log | samtools sort -O BAM --threads 4 -o ./E_coli_hisat_.bam
#注釋同上
2.3 計(jì)數(shù)
2.3.1 why featurecount?
- featurecount對特征區(qū)域終止位置堿基處理更準(zhǔn)確(與htseq相比)
- htseq對multmap處理更準(zhǔn)確。a基因兩reads匹配而b基因只有一個(gè)read匹配的話,則reads會匹配到a基因。而htseq則記錄為multimap
- 更快。比htseq快22倍左右,內(nèi)存占用為htseq的1/6
2.3.2 count
featureCounts -T 4 -F GTF -t exon -g gene_id -s 0 -Q 10 -C -B -p -a Escherichia_coli.exon.gtf -o ./feature_count.txt E_coli.bam
# -T 線程數(shù)
# -F 參考基因注釋文件格式默認(rèn)GTF
# -t 指定gtf注釋文件的feature類型。exon 即feature(count的對象)。默認(rèn)將exon作為一個(gè)feature
# -g 指定meta-feature類型。即從注釋文件中提取Meta-features信息用于read count,默認(rèn)是gene_id
# -s 特異性建庫
# -Q 質(zhì)量控制??刂票葘eads最小質(zhì)量值。默認(rèn)0
# -C 舍棄掉非正常匹配:paired read比對到不同染色體上或者相同染色體但不同鏈上
# -B paired reads都成功比對到參考基因組的reads才計(jì)數(shù)
# -p 針對的是雙端測序
# -a 基因組注釋文件GTF/GFF
# -o 輸出文件
featureCounts -T 6 -p -t exon -g gene_id -a anno.gtf -o SRR_fCount.txt SRR.bam
#官網(wǎng)的示例表達(dá)簡寫
2.3.3 結(jié)果文件的提取
cut -f 1,7 feature_count.txt |grep -v '^#' >featureCounts.txt
# 提取第一列(Gene_id)和第七列(counts)數(shù)據(jù)。并去除空行。輸出到文本文件
下一步是差異基因分析。通過實(shí)驗(yàn)組和對照組的counts文件比對來分析DE:差異基因。
然后是差異基因的選擇。通過設(shè)置合適的差異基因篩選條件。padj<0.05,|log2FC|>=1(無生物重復(fù))。
篩選出合適的DE然后進(jìn)行GO和KEGG分析。
━┉┉┉┉∞┉┉┉┉━━┉┉┉┉∞┉┉┉┉━━┉┉┉┉∞┉┉┉┉━━┉
●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞
3 生物網(wǎng)站
3.1 NCBI-BLAST
3.1.1 blast的使用
如上圖所示,blast分為blastn / blastp / blastx / tblastn / tblastx
| 工具 | 查詢序列 | 使用的數(shù)據(jù)庫 | 適用范圍 |
|---|---|---|---|
| blastn | 核酸 | 核酸 | 核酸序列比對 |
| blastp | 蛋白質(zhì) | 蛋白質(zhì) | 蛋白質(zhì)序列與蛋白質(zhì)數(shù)據(jù)庫中的序列進(jìn)行比較,可以尋找較遠(yuǎn)的關(guān)系 |
| blastx | 核酸 | 蛋白質(zhì) | 將給定的核酸序列翻譯成蛋白質(zhì)與蛋白質(zhì)數(shù)據(jù)庫中的序列進(jìn)行比對,對分析新序列和EST(表達(dá)序列標(biāo)簽)很有用 |
| tblastn | 蛋白質(zhì) | 核酸 | 先將核酸數(shù)據(jù)庫翻譯為蛋白,在匹配。對于尋找數(shù)據(jù)庫中序列沒有標(biāo)注的新編碼區(qū)很有用 |
| tblastx | 核酸 | 核酸 | 先將檢索序列和核酸數(shù)據(jù)庫全翻譯為蛋白再匹配。特殊情況使用 |
3.1.2 常用子數(shù)據(jù)庫
-
NR數(shù)據(jù)庫:非冗余蛋白庫,所有 GenBank+EMBL+DDBJ+PDB中的非冗余蛋白序列,對于所有已知的或可能的編碼序列, NR記錄中都給出了相應(yīng)的氨基酸序列以及專門蛋白 數(shù)據(jù)庫中的序列號NR庫相當(dāng)于一個(gè)以核酸序列為基礎(chǔ)的交叉索引,將核酸數(shù)據(jù)和蛋白數(shù) 據(jù)聯(lián)系起來NT是NR的子集。(引自ppt)
-** RefSeq數(shù)據(jù)庫**:參考序列數(shù)據(jù)庫,包含RefSeq_genomic, RefSeq_protein和RefSeq transpans,即具有生物意義上的非冗余基因,轉(zhuǎn)錄本和蛋白質(zhì)序 列,是經(jīng)過NCBI和其他組織校正的數(shù)據(jù)庫,包括了官方的基因符號和可選的符號。(引自ppt)
3.2 Ensembl數(shù)據(jù)庫
EMBL-EBI數(shù)據(jù)庫包括Ensembl數(shù)據(jù)庫(脊椎動物數(shù)據(jù)庫)和Ensembl Genome(非脊椎動物全基因組數(shù)據(jù)庫)數(shù)據(jù)庫。
Ensembl數(shù)據(jù)庫中人類基因組和注釋文件下載
進(jìn)入Ensembl首頁點(diǎn)擊上方導(dǎo)航欄的download進(jìn)入下載界面,可以選擇兩種方式下載??梢渣c(diǎn)擊通過FTP下載。進(jìn)入/pub/目錄。選擇最新的數(shù)據(jù)文件。例如截止2019/3目前最新的是release-95。/pub/release-95/下多種基因序列文件。基因組選擇fasta/。注釋文件可以選擇gtf/。若要獲取基因組文件,依次打開/pub/release-95/fasta/homo_sapiens/dna/選擇相應(yīng)文件下載。如果需要RNA-seq比對可以選擇Homo_sapiens.GRCh38.dna_rm.toplevel.fa.gz下載。若要獲取注釋文件,依次打開/pub/release-95/gtf/homo_sapiens/需要RNA-seq回帖參考,可以選擇Homo_sapiens.GRCh38.95.gtf.gz下載。
</br>
下載連接直達(dá):
人類基因組:ftp://ftp.ensembl.org/pub/release-95/fasta/homo_sapiens/dna/
人類基因組注釋文件:ftp://ftp.ensembl.org/pub/release-95/gtf/homo_sapiens/
3.3 UCSC
隨著眾多物種基因組測序的完成,僅僅以純文本的方式存儲 和展示基因組DNA字符將無法滿足對測序數(shù)據(jù)的研究,因此, UCSC應(yīng)用而生。UCSC能夠滿足在任何尺度上快速地查詢和顯示 基因組的內(nèi)容,以及對基因組序列進(jìn)行注釋,注釋內(nèi)容可以在一個(gè) 窗口中顯示所有與某一基因組區(qū)域相關(guān)的信息:定位和序列信息、 已知基因和預(yù)測基因、表型和文獻(xiàn)支持、mRNA和EST、調(diào)控 (CpG島)、比較基因組信息、SNP、基因組重復(fù)元件等。(引自ppt)
3.4 pfam-蛋白質(zhì)結(jié)構(gòu)預(yù)測
需要進(jìn)一步深入學(xué)習(xí)
━┉┉┉┉∞┉┉┉┉━━┉┉┉┉∞┉┉┉┉━━┉┉┉┉∞┉┉┉┉━━┉
●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞ ∞●∞
4. R語言基礎(chǔ)
4.1 常用函數(shù)
head() #查看文件開頭前十行.查看尾端信息是tail
summary() #統(tǒng)計(jì)總結(jié)。包括最小值,1/4位值,中位數(shù),平均數(shù),3/4位值,最大值
dim() #顯示緯度。eg.輸出結(jié)果是 150 5 代表有150行5列。
model() #顯示對象類型
max() #顯示最大值,最小值是 min()
sort() #篩選排序。
sort(iris$Sepal.Length,decreasing = T) #iris數(shù)據(jù)的Sepal.Length列按照大到小排序(從小到大是decreasing = T)
which.max() #返回最大值大索引下標(biāo)。最小值是which.min()
iris$Sepal.Length[which.max(iris$Sepal.Length)] #等價(jià)于max(iris$Sepal.Length)
median() #輸出中位數(shù)
length() #顯示對象中元素個(gè)數(shù)。length(iris)=5;length(iris$Sepal.Length)=150
var() #求數(shù)據(jù)的方差
sum() #對數(shù)據(jù)求和
t() #轉(zhuǎn)換表格的坐標(biāo)軸直接轉(zhuǎn)換。
4.2 數(shù)據(jù)類型
R中的對象(數(shù)據(jù)集合):向量、矩陣、數(shù)據(jù)框、數(shù)組、列表。
對象的五種基本類型:字符型(character)、數(shù)值型(numeric,包括小數(shù) )、整型(integer)、復(fù)數(shù)型(complex)、邏輯型(logical,TRUE/FALSE)
對象的屬性:名字(names,dimnames),維度(dimensions, 包括矩陣等),類別(class,包括數(shù)字、整數(shù)等), 長度(length) attributes() 查看對象屬性,沒有屬性返回NULL
4.2.1 向量
向量的創(chuàng)建
a <- c(1,2,3,4) # 為a賦值numeric 數(shù)值型
b <- c(1:4) #為b賦值integer數(shù)值型
c <- c("hello","world") #賦值charac字符型
d <- c(TURE,FALSE) #賦值為logical邏輯型
向量元素的訪問
a <- c(11:20)
#生成以一個(gè)整形向量,11~20共十個(gè)元素
a
#列出a的所有元素
a[1]
#訪問a中第一個(gè)元素即 11
a[c(1,3,5,7)]
#訪問a中第1,3,5,7個(gè)元素,注意是 a[c(1,3,5,7)] ,而不是 a[1,3,5,7] 這是矩陣的訪問格式
a[3:8]
#訪問a中第3~8個(gè)元素
4.2.3 矩陣
- 矩陣只能包含一種數(shù)據(jù)類型,如數(shù)值型。
- 有二維性
4.2.3.1 矩陣的創(chuàng)建
x <- matrix(data = c(11:30) , nrow = 5 , ncol = 4 , byrow = FALSE)
#matix 創(chuàng)建向量
#data=c(11:30) 數(shù)據(jù)輸入
#nrow = 5,ncol = 4 有5行4列
#byrow = FALSE 依據(jù)列填充,依據(jù)行填充是 byrow = TRUE
y <- c(11:20) #向量型y
y #查看向量型y內(nèi)容
dim(y) #查看y的緯度信息
dim(y) <- c(2,5) #重新定義緯度信息2行5列
dim(y) #顯示變量y的緯度信息
y #查看矩陣y的信息
z1 <- c(11:13)
z2 <- c(21:23)
z <- cbind(z1,z2) #通過列對齊,對向量z1,z2合并.行對齊是rbind
dim(z)
4.2.3.2 矩陣訪問
x <- matrix(data = c(11:30), nrow = 5, ncol = 4, byrow = FALSE)
#創(chuàng)建矩陣
x[3,3]
#訪問第3行第3列元素
x[3,]
#訪問第3行所有元素
x[,3]
#訪問第3列所有元素
x[3]
#訪問第3個(gè)元素,順序與矩陣生成byrow參數(shù)有關(guān)
x[1:2,]
#顯示前兩行元素
x[,3:4]
#顯示第3到4列元素
#------------------------------------------------------------------#
#對于有標(biāo)題到矩陣可以直接通過標(biāo)題訪問
y <- matrix(data = c(11:30),nrow = 5,ncol = 4,byrow = FALSE,dimnames = list(c('r1','r2','r3','r4','r5'),c('c1','c2','c3','c4')))
# 創(chuàng)建矩陣的過程中重命名行索引名稱、列索引名稱.如果不設(shè)置行名,可以填寫NULL
y['r3','c3']
#訪問第r3行r3列元素
4.2.4 數(shù)據(jù)框(生信常用)
- 可以存放多種數(shù)據(jù)的矩陣
4.2.4.1 數(shù)據(jù)框的創(chuàng)建
transcript_id <- c('TUCP_1','TUCP_2','lncRNA_1','lncRNA_2')
# 創(chuàng)建字符型向量
treat <- c(1,2,3,4)
#創(chuàng)建數(shù)值型向量
control <- c(5,6,7,8)
# 創(chuàng)建向量
chr <- c('chr1','chr2','chr3','chr4')
# 創(chuàng)建向量chr
testdata <- data.frame(transcript_id,teat,ctrol,chr)
# 創(chuàng)建數(shù)據(jù)框testdata
dim(testdata)
# 查看數(shù)據(jù)框testdata的維度信息
#--------------------#
#也可以為數(shù)據(jù)庫添加題頭
tdaddrowname <- data.frame(transcript_id,treat,control,chr,row.names = c('r1','r2','r3','r4'))
# 為創(chuàng)建的數(shù)據(jù)框tdaddrowname更換行索引
4.2.4.1 數(shù)據(jù)框的訪問
taddrowname
#查看數(shù)據(jù)框的內(nèi)容
tdaddrowname[,2:3]
#顯示數(shù)據(jù)框中的第2列、第3列數(shù)據(jù)
tdaddrowname[c('transcript_id','chr')]
#選取多列
#矩陣訪問的方式同樣使用于數(shù)據(jù)框的訪問
tdaddrowname$transcript_id
#如果數(shù)據(jù)框有列名,可以是直接使用$直接調(diào)用該列,直接調(diào)用該列
#------------------------------------#
inform <- names(tdaddrowname) %in% c('trancript_id','chr')
#names()獲取對象的或者設(shè)置對象的名稱
#%in%相當(dāng)于match()函數(shù)的一個(gè)縮寫。用來判斷一個(gè)數(shù)組或矩陣是否包含在另一個(gè)數(shù)組或矩陣?yán)铩?#A %in% B,若A中元素有和B中相匹配,則返回邏輯型 TURE,不匹配則返回邏輯型 FALSE
newtd <- tdaddtowname[!inform]
#反向選擇非匹配的列
newtd
#查看
4.2.5 數(shù)組
- 數(shù)組通常是三緯的
數(shù)組的創(chuàng)建
x1 <- array(data = c(11:30))
#創(chuàng)建一緯數(shù)組
x2 <- array(data = c(11:30),dim = c(4,5))
#創(chuàng)建二維數(shù)組
length(x2)
#查看元素個(gè)數(shù)
dim(x2)
#查看緯度信息
x3 <- array(data = c(11:37),dim = (3,3,3))
#創(chuàng)建三維數(shù)組
x3 <- array(data = c(11:37),dim = c(3,3,3),dimname = list(c('r1','r2','r3'),c('c1','c2','c3'),c('m1','m2','m3')))
#創(chuàng)建有索引標(biāo)題的三維數(shù)組
length(x3)
dim(x3)
x3
#查看 x3 的屬性和元素
數(shù)組的訪問
x1
#一緯數(shù)組的訪問和向量訪問一樣
x2[2,3]
x2[1,]
#二維數(shù)組的訪問和矩陣的訪問方法一致
x3['r1','c2','m3']
#依據(jù)索引訪問元素
x3[1,2,3]
#依據(jù)元素的緯度信息訪問元素
x3[,,3]
#依據(jù)緯度信息,訪問第三面的所有元素
x3[,'c2',]
#依據(jù)索引,訪問所有面第二列元素
4.2.6 列表
- 可以包含各種不同類型對象
- 列表(list)內(nèi)容中的代碼引自ppt
xlist <- list(c(1:5),matrix(data = c(1:10),nrow = 2,ncol = 5,byrow = FALSE),123,TRUE)
# 定義新列表
length(xlist)
# 查看列表中的元素個(gè)數(shù)
xlist
# 查看列表xlist的全部信息
dim(xlist)
# 列表沒有維度信息
dim(xlist) <- c(2,2)
dim(xlist)
class(xlist)
# 一旦給列表添加了維度信息,等價(jià)于轉(zhuǎn)換成了矩陣格式
############# list訪問 ############
xlist <- list(c(1:5),matrix(data = c(1:10),nrow = 2,ncol = 5,byrow = FALSE),123,TRUE)
# 定義新列表
xlist[[1]]
# 訪問第一個(gè)元素
class(xlist[[1]])
# 屬于向量中的范疇,可以在此基礎(chǔ)上進(jìn)行“向量訪問”
xlist[[1]][2:4]
# 訪問列表第一個(gè)元素(向量類型)的第2至5的元素
xlist[[2]][1,3]
# 訪問列表中矩陣元素的第一行、第三列的元素
xlist[[2]][2,]
# 訪問列表中矩陣元素的第二行所有數(shù)據(jù)信息
xlist[[c(2,4)]]
# 列表第二個(gè)元素的第4個(gè)元素
4.3 數(shù)據(jù)處理
4.3.1 數(shù)據(jù)導(dǎo)入
- 常用
read.table()函數(shù)
xlsdata1 <- read.table(file = "FPKM.xls",header = TRUE, sep = '\t', stringsAsFactors = FALSE,row.names = 1)
# read.table 讀取文件
# file="FPKM.xls" 要讀取的文件
## header=TRUE 讀取表頭
## sep='\t' 設(shè)置列間隔是tab
# stringsAsFactors = FALSE #不作為因子?
## row.names = 1 設(shè)置行標(biāo)題為第一列
4.3.2 數(shù)據(jù)導(dǎo)出
write.table(x = iris,file = 'test_iris1.xls',append = FALSE,sep = '\t',row.names = FALSE)
# write.table() 數(shù)據(jù)導(dǎo)出
# x=iris 數(shù)據(jù)集
# file = 'test_iris1.xls' 導(dǎo)出文件名
# append = FALSE 不以追加模式導(dǎo)出
# sep='\t' 分隔符是TAB
# row.name=FALSE 不導(dǎo)出行名
4.3.3 缺省值處理
- 缺省值會影響數(shù)據(jù)的處理
- 對于NA值是錯(cuò)誤、遺失的數(shù)據(jù),NULL是不存在的,不占用空間,不會列于計(jì)算之中
- 當(dāng)向量數(shù)據(jù)中存在NA值,sum()結(jié)果也是NA值
先定位再處理
x <- c(1,3,NA,7)
# 賦值向量
is.na(x)
### 查詢x中元素是否有NA值,如果是則在該元素緯度坐標(biāo)中返回TURE,不是返回FALSE
table(is.na(x))
### table()可以對元素進(jìn)行統(tǒng)計(jì)并計(jì)數(shù)。
sum(x,na.rm = TRUE)
## 在統(tǒng)計(jì)向量時(shí)候通過 na.rm = TRUE 來移除 NA 值,很多函數(shù)都有這個(gè)選項(xiàng)
x[which(is.na(x))] <- 0
### which()函數(shù)返回符合條件的響應(yīng)位置,which(is.na(x))會返回TURE對位置
# which(b[,3]==1.7) 查詢b的第三列中數(shù)值是1.7的位置
# 把NA位置選出然后用0代替
# 還可以使用 x[is.na(x)] <- 0 來代替NA


其他方法處理NA值
test <- data.frame(x=c(1,2,3,4,NA),y=c(6,7,NA,8,9))
# 構(gòu)建數(shù)據(jù)框
which(is.na(test),arr.ind = T)
### which(is.na(test)) 可以匹配NA值,arr.ind =T 可以返回相應(yīng)返回行列坐標(biāo),適用于多維數(shù)據(jù)。如果沒有arr.ind = T 則返回一個(gè)序列數(shù)。
test[which(is.na(test),arr.ind = T)] <- 0
#結(jié)合which進(jìn)行多維數(shù)據(jù)類型的缺失替代
na.omit(test)
## 可以直接刪除NA值所在的一行數(shù)據(jù)
4.3.4 數(shù)據(jù)拆分與合并
stack()
data('PlantGrowth') #加載數(shù)據(jù)
fomula(PlantGrowth) #查看格式
pg <- unstack(PlantGrowth)
# 將數(shù)據(jù)去堆棧排列
stack(pg)
# 將多列多數(shù)據(jù)堆棧排列
stack(pg,select = ctrl)
# 選擇名為 ctrl 的特定向量
stack(pg,select = -ctrl)
# 選擇并刪除向量
## stack只使用于向量數(shù)據(jù)類型?
cbind / rbind()
x <- matrix(data = c(1:10),nrow = 5, ncol = 2)
y <- matrix(data = c(21:30),nrow = 2,ncol = 5)
xyr <- rbind(x,y)
# 將 x,y 依據(jù)行方向結(jié)合在一起
xyc <- cbind(x,y)
# 將x,y 依據(jù)列方向結(jié)合在一起
## cbind & rbind 結(jié)合的必須是相匹配的 例如cbind 需要列一致
merge()
ID <- c(1,2,3,4)
name <- c('li','zhang','zhou','wu')
score <- c(23,45,67,98)
st1 <- data.frame(ID,name)
st2<-data.frame(ID,score)
st <- merge(st1, st2, by = 'ID')
# 按照ID的對應(yīng)關(guān)系將st1 st2的信息合并
merge(ink1,ink2,by="id",all=T)
#所有數(shù)據(jù)列都放進(jìn)來,空缺的補(bǔ)值為NA
merge(ink1,ink2,by="id",all=F)
#默認(rèn),只取兩者的共有的部分
subset()
filedata <- read.table(file = "FPKM.xls",header = TRUE,sep = '\t',stringsAsFactors = FALSE)
class(filedata)
dim(filedata)
summary(filedata)
newset <- subset(x = filedata , subset = (treat2 > 100),select = treat1:control3)
#subset 依據(jù)要求返回向量、矩陣、數(shù)據(jù)框的子集
#x=filedata 數(shù)據(jù)輸入
#subset = (treat2 > 100) 選取treat2一列大于100的元素
#select = treat1:control3 界定選取子集的 元素/范圍/哪幾列
melt
- reshape2包
names <- c('A','B','C')
yuwen <- c(87,67,98)
shuxue <- c(78,69,88)
yingyu <- c(56,64,77)
xingbie <- c('F','M','F')
chengjidan <- data.frame(names,yuwen,shuxue,yingyu,xingbie)
chengjidan
newtable <- melt(data = chengjidan,id.vars = c('names','xingbie'),variable.name = 'kemu',value.name = 'fenshu')
4.3.5 數(shù)據(jù)的匹配
R語言中有多種函數(shù)支持正則表達(dá)匹配,其中比較常用的是grep、gsub、grepl
#完整的grep參數(shù)
grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE, invert = FALSE)
#grep() 查找特定格式元素。查找,存在參數(shù)value,返回結(jié)果是匹配項(xiàng)的下標(biāo)
#pattern 正則表達(dá)式
#x 字符向量
#ignore.case=FALSE 默認(rèn)選項(xiàng)式FALSE表示區(qū)分大小寫,不區(qū)分式TURE
#perl=FALSE 默認(rèn)false,表示兼容perl正則表達(dá)
#fixed=FALSE 如果為TRUE,pattern是要匹配的字符串。覆蓋所有沖突的參數(shù)
#useBytes=FALSE 默認(rèn)選項(xiàng)FALSE,TURE情況下是逐字節(jié)匹配而不是逐字符匹配
#invert = FALSE 如果是TURE則不返回元素索引或值
| 函數(shù) | 作用 |
|---|---|
| grep() | 查找,存在參數(shù)value,返回結(jié)果是匹配項(xiàng)的下標(biāo) |
| grepl() | 查找,返回值為true |
| sub() | 只對查找到的第一個(gè)內(nèi)容進(jìn)行替換。(同下) |
| gsub() | 對查找到的所有內(nèi)容進(jìn)行替換,返回替換后的text;否則 直接返回text |
表格引自ppt
string1 <- 'qwewertyuioplkjhjnmbvc,fdsaa,email:chongqing@126.comsdderf'
string2 <- '112351426325637,tel:0643-3445676,tel:0654-6778877,7655263529987352414099827tel:72625637784383726'
grepl("[a-z]+@[0-9]+.c(n|om)",string1)
#匹配 ‘字母@數(shù)字.com’或者'字母@數(shù)字.cn'格式的元素,有的話返回TURE
grepl("[0-9]+-[0-9]+",string2)
#匹配 ‘?dāng)?shù)字+-+數(shù)字’格式的元素
5. R語言繪圖
R語言的四套圖形系統(tǒng):base、grid、lattice、ggplot2。隨著ggplot2的發(fā)展越來越成為主流。
5.1 繪圖參數(shù)表示方式
5.1.1利用元素屬性直接更改
常用?元素屬性可以直接通過元素參數(shù)設(shè)置
| 元素參數(shù) | 意義 |
|---|---|
| font | 字體 |
| lty | 線類型 |
| lwd | 線寬度 |
| pch | 點(diǎn)類型 |
| xlab | 橫坐標(biāo) |
| ylab | 縱坐標(biāo) |
| xlim | 橫坐標(biāo)范圍 |
| ylim | 縱坐標(biāo)范圍 |
5.1.2 屬性.元素
例如部分屬性如下
| 屬性 | 意義 |
|---|---|
| col | 顏色 |
| cex | 縮放倍數(shù) |
| font | 字體 |
部分元素如下
| 元素 | 意義 |
|---|---|
| main | 標(biāo)題 |
| sub | 副標(biāo)題 |
| axis | 坐標(biāo)刻度 |
| lab | 坐標(biāo)軸標(biāo)簽 |
因此。col.main 即 標(biāo)題的顏色;cex.main 標(biāo)題的縮放倍數(shù);font.sub 副標(biāo)題的字體樣式。等等
5.1.3 自定義屬性需要用到函數(shù)修改
一些特異性屬性需要用到函數(shù)來修改
如legend(location, title, legend, ...)來修改圖例的屬性
5.2 R語言繪圖常用軟件包概述
5.2.1 畫圖軟件
| 畫圖 | 軟件包 |
|---|---|
| 熱圖 | pheatap |
| 韋恩圖 | VeinnDiagram |
| PCA圖 | ggplot |
| 箱線圖/小提琴圖/散點(diǎn)圖/直方圖/密度分布圖/柱狀圖/氣泡圖/火山圖 | ggplot2 |
5.3 ggplot2概述
ggplot2特點(diǎn)
- 圖層設(shè)計(jì)
- 統(tǒng)計(jì)變換
- 擴(kuò)展包豐富
5.3.1 ggplot2 圖形部件
-
數(shù)據(jù)(data)和映射(mapping)
反應(yīng)的是數(shù)據(jù)/元素和圖形對應(yīng)關(guān)系 -
標(biāo)度(scale)
標(biāo)度負(fù)責(zé)控制映射后圖形屬性的顯示方式 ,具體形式上來看是圖例和坐標(biāo)刻度(引自ppt) -
幾何對象(Geometric)
圖像中的元素,控制繪制的圖形類型
在這里插入圖片描述 -
統(tǒng)計(jì)變換
對原始數(shù)據(jù)進(jìn)行某種計(jì)算,例如對二元散點(diǎn)圖加上一 條回歸線 -
坐標(biāo)系統(tǒng)
坐標(biāo)系統(tǒng)控制坐標(biāo)軸并影響所有圖形元素,坐標(biāo)軸可 以進(jìn)行變換以滿足不同的需要
可以通過變換坐標(biāo)系統(tǒng),繪制餅圖、極坐標(biāo)圖 -
圖層系統(tǒng)
數(shù)據(jù)、映射、幾何對象、統(tǒng)計(jì)變換等構(gòu)成一個(gè)圖層
圖層可以允許用戶一步步的構(gòu)建圖形,方便單獨(dú)對圖層進(jìn)行修改 -
分面
控制分組繪圖的方法和排列形式,將數(shù)據(jù)按某種方式分組,然后分別繪圖
5.3.2 ggplot2作圖思路
- 數(shù)據(jù)映射
- 標(biāo)度,圖例
- 統(tǒng)計(jì)變換
- 圖層,分面
- 美化
5.3.3 圖形元素
以上圖為例,有以下元素
- axis.title 坐標(biāo)軸標(biāo)題
- axis.line 坐標(biāo)軸線
- axis.text 坐標(biāo)軸標(biāo)示
- axis.text.bar 坐標(biāo)軸bar
- panel 面板
- panel.grid 面板網(wǎng)格
- panel.background 面板背景
- legend 圖例
- legend.title 圖例標(biāo)題
- legend.text 圖例內(nèi)容
- legend.key
5.4 R語言繪制柱狀圖
library(ggplot2)
setwd("~/SUPER QUN/3.2.2") #設(shè)置工作目錄
fp <- read.table("FPKM.xls",header = T ,row.name = 1) #讀取目錄
head(fp)
bar <- ggplot(fp) + geom_bar(aes(x = category, fill = strand),posirion = "fill")
#ggplot(fp) 指定作圖文件為fp
#geom_bar() 是ggplot2中一種作圖的軟件。作用是通過映射,用條形圖的高度來展示數(shù)值多少
#aes(x=category,fill=strand) 表示映射關(guān)系,橫軸展示分類,通過填充不同顏色來區(qū)分strand 這里也可以吧映射放到ggplot(fp,aes())里面,但是這樣相當(dāng)于全局映射,不便于添加其他元素和映射
#position="fill" 表示strand里面兩個(gè)元素的展示方式??梢杂腥N方式"stack"(堆疊),"dodge"(并列顯示)和"fill"(百分比填充),默認(rèn)為"stack"。
#這里面是ggplot自動統(tǒng)計(jì)來正負(fù)鏈個(gè)數(shù)