學(xué)習(xí)生物信息,我都應(yīng)該掌握那些內(nèi)容?

目錄

持續(xù)更新ing.....
最后更新時(shí)間:2019/3/8 10:28 AM

1.linux命令

1.1 linux的權(quán)限

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   #文件下有多少文件和目錄
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é)果如下
cat 2.txt |grep -n --color "the"
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?

  1. featurecount對特征區(qū)域終止位置堿基處理更準(zhǔn)確(與htseq相比)
  2. htseq對multmap處理更準(zhǔn)確。a基因兩reads匹配而b基因只有一個(gè)read匹配的話,則reads會匹配到a基因。而htseq則記錄為multimap
  3. 更快。比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

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作圖思路

  1. 數(shù)據(jù)映射
  2. 標(biāo)度,圖例
  3. 統(tǒng)計(jì)變換
  4. 圖層,分面
  5. 美化

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ù)

5.5 R語言繪制富集分析柱形圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容