—————————第一部分[三維數(shù)據(jù)結(jié)構(gòu)]———————
一、三維數(shù)據(jù)結(jié)構(gòu)
數(shù)組概況:
二維數(shù)據(jù)結(jié)構(gòu)——矩陣
↓
疊加二維矩陣(矩陣切片/吐司切面)
↓
三維數(shù)據(jù)結(jié)構(gòu)——array(吐司) 即dim(x,y,z)
數(shù)組的特殊形式 :二維 矩陣
array()
①格式:
array(data=NA,dim=length(data),dimnames=NULL)
array表示三維矩陣,所以array設(shè)置三層dim維數(shù)。
z <- array(1:24, dim = 2:4)
②索引:用[]或者,
eg:對z的每一層取平均值
>z <- array(1:24, dim = 2:4)
> mean(z[,,1])
[1] 3.5
> mean(z[,,2])
[1] 9.5
> mean(z[,,3])
[1] 15.5
> mean(z[,,4])
[1] 21.5
> apply(z,3,mean)
[1] 3.5 9.5 15.5 21.5
這里用兩個
,隔開,出現(xiàn)三個間隔,分別表示行、列、層。
二、apply()函數(shù)
①格式:
apply(x,mar,FUN)
①mar=1,代表行;mar=2,代表列;mar=3,代表層
②apply()函數(shù)的輸入、輸出值為規(guī)整的格式:array、data.frame
Eg:
z <- array(1:24, dim = 2:4)
apply(z,3,mean)
三、lapply()函數(shù)及sapply()函數(shù)
1、lapply()
①格式:lapply(X,FUN)
說明:
A、關(guān)于X參數(shù):
a、lapply中的x是對list中每一列的元素進(jìn)行操作;若是矩陣,則對矩陣進(jìn)行操作 以此類推
b、lapply中的x參數(shù),只要是單位元素的 都可以加入
B、FUN可以是某一個函數(shù)
②輸入的格式為list(行間數(shù)據(jù)類型不規(guī)整)
③輸出數(shù)據(jù)類型為list
EG:
x <- list(1:10,2:8,5:7)
lapply(x,mean)
class(lapply(x,mean)) ##lapply返回結(jié)果為list
2、sapply()
①格式:sapply(X,FUN...,simplify=T)
simplify=T為默認(rèn)設(shè)置;若simplify=F,則返回結(jié)果與lapply相同,輸出的數(shù)類型據(jù)為list
②輸出格式為:list(行間數(shù)據(jù)類型不規(guī)整)
③輸出數(shù)據(jù)類型為矩陣 ;若輸出數(shù)據(jù)類型為向量√,向量(一維矩陣)是矩陣中的特例
———————————第二部分[分組]———————————
一、因子
①格式:
factor(x = character(), levels, labels = levels,exclude = NA, ordered = is.ordered(x), nmax = NA)
②因子分為有序因子和無序因子;ordered=T為有序因子;ordered=F為無序因子
eg:
load('flag.Rdata')###加載要用的數(shù)據(jù)
####創(chuàng)建一個向量
topleft <- flag$topleft
table(flag$topleft)
class(flag$topleft)
set.seed(0709)
####源于向量的因子
topleft1 <- factor(topleft,ordered = TRUE)
結(jié)果:

③意義:
以GEO分析為例,對數(shù)據(jù)進(jìn)行分組處理時,需將數(shù)據(jù)都轉(zhuǎn)化為factor,才可以對數(shù)據(jù)進(jìn)行分組(level)
④所有的factor必須是level的元素

如上圖,總結(jié):
①一組數(shù)據(jù)包括兩部分:
上面的內(nèi)容為factor,下面的分組種類信息為level
②level為上面所有內(nèi)容的unique
③圖示說明:
理論:總況
舉例:舉例
④factor與level為對應(yīng)關(guān)系;若數(shù)據(jù)類型為character,則沒有l(wèi)evel
⑤level排序可以影響圖片的順序
可參考:
http://blog.sina.com.cn/s/blog_6cb445270102yjxa.html
https://blog.csdn.net/hsdcc217/article/details/78510087
二、split()函數(shù)
①格式:
split(x,f,drop=F,...)
①x是待分組數(shù)據(jù),f是分組依據(jù),drop=T為刪除不存在的level
②因子f與待分組數(shù)據(jù)x長度應(yīng)一致
③因子f是分組依據(jù),分組依據(jù)可有多個標(biāo)準(zhǔn),該標(biāo)準(zhǔn)用list承接;分組依據(jù)的組合為圖一的組合搭配所示,若1-A有結(jié)果則輸出結(jié)果;若1-A未匹配出結(jié)果,則輸出integer(0)
④數(shù)據(jù)格式:待分組數(shù)據(jù)x的數(shù)據(jù)類型為data.frame ;輸出結(jié)果的數(shù)據(jù)類型為list

Eg:
>load('flag.Rdata')
>split(flag$landmass,list(flag$zone,flag$topleft))
>unique(flag$zone)
[1] 1 3 2 4
>unique(flag$topleft)
[1] "black" "red" "green" "blue" "white" "orange" "gold"
>length(split(flag$landmass,list(flag$zone,flag$topleft)))
[1] 28
> length(split(flag$landmass,list(flag$zone,flag$topleft),drop = T)) ###drop去掉不存在的因子
[1] 24
三、tapply()
在split()的基礎(chǔ)上進(jìn)一步分析,添加“FUN”
①格式:
tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)
①X是待分組數(shù)據(jù)
②INDEX是分組信息(可以有幾個因子,用list承接組合因子即可)
③A與B可以沒關(guān)系 但是長度一樣
④FUN為計算函數(shù)
Eg:
>load('flag.Rdata')
> tapply(flag$landmass,flag$topleft,mean)
black blue gold green orange red white
3.416667 3.255814 2.500000 3.625000 4.500000 3.982143 3.414634
> tapply(flag$landmass,list(flag$zone,flag$topleft),mean)
black blue gold green orange red white
1 3.857143 4.263158 4.000000 4.230769 4.666667 4.375000 4.000000
2 5.000000 5.000000 NA 4.000000 4.000000 4.571429 5.428571
3 NA 3.600000 2.000000 2.000000 NA 3.000000 4.000000
4 1.333333 1.400000 1.666667 2.700000 NA 3.000000 1.571429
——————————第三部分[循環(huán)函數(shù)]———————————
一、while()
①格式:
while(i){XX
i*}
①i是設(shè)置循環(huán)數(shù),返回結(jié)果是一個邏輯值;xx是執(zhí)行的一個操作,為邏輯操作;而i*是對i作出的更改,否則就近進(jìn)入一個死循環(huán)
②break,next可以嵌套在while中使用
②while()循環(huán)中,數(shù)據(jù)輸入為真 ,輸出為假
③while()是一個循環(huán)操作,如果要得到一個輸出結(jié)果需要有一個容器接住。所以,在運用while函數(shù)時,要先了解、熟悉while的輸出結(jié)果,創(chuàng)建一個空的數(shù)據(jù)結(jié)構(gòu),接住while的輸出結(jié)果(如:tmp<-c())
Eg:
> i <- 1
> #####熟悉會產(chǎn)生什么結(jié)果,創(chuàng)建相應(yīng)大小的數(shù)據(jù)結(jié)構(gòu)
> tmp <- c()
> while (i <=6) {
+ tmp[i]<- letters[i]
+ i = i+1####要有這種設(shè)置,才會對i產(chǎn)生改變,才不會是死循環(huán)
+ }
> tmp
[1] "a" "b" "c" "d" "e" "f"
二、ifelse()
①格式:
ifelse(test, yes, no)
②if:只是處理第一個元素,若為真,就輸出結(jié)果;處理的是多個一個邏輯值,得到的是一個輸出
③ifelse:是處理一串邏輯值,得到一串輸出結(jié)果;
④注意其中的嵌套ifelse (邏輯縝密一些);若嵌套,則從里到外一層層看
——————————第四部分[數(shù)據(jù)處理]———————————
一、排序
1、sort、order、rank區(qū)別
基礎(chǔ)數(shù)據(jù):input輸入數(shù)據(jù)
sort:返回結(jié)果為排序后的數(shù)值;返回數(shù)值結(jié)果默認(rèn)升序
order:返回結(jié)果output中的數(shù)據(jù)應(yīng)來源于input的位置信息(為位置信息,不非具體數(shù)值);將sort的輸出結(jié)果遞進(jìn);可作用于多個向量
rank:返回結(jié)果input的排名(為位置信息,不非具體數(shù)值);

2、全集、交集、差集
union(a,b) : a與b的全集
intersect(a, b): a與b的交集
setdiff(a, b) : 差集a有 ,b沒有;返回的是去重結(jié)果
setdiff(b, a) : 差集b有,a沒有;返回的是去重結(jié)果

相關(guān)的理解代碼請看:
E:/生信技能樹/[ZHUHAI_Biotrainee]/GuangZhou/R_2/step04_1_set_sort_rank_order
二、字符串處理
"E:/生信技能樹/[ZHUHAI_Biotrainee]/GuangZhou/R_2/RegExCheatsheet"以及"E:/生信技能樹/[ZHUHAI_Biotrainee]/GuangZhou/R_2/step05__2_character_operation’'以及以及"E:/生信技能樹/[ZHUHAI_Biotrainee]/GuangZhou/R_2/step05__1_regular_exp’'中含有很多的字符串符號說明
1、字符串符號_常用總結(jié)
1、
[^]取反
2、{}匹配次數(shù)設(shè)置
3、$字符位于字符尾部;尾部
4、^后面字符位于字符首位;首位
5、^t后面字符位于字符首位
6、\\d表示數(shù)字
7、\\D表示非數(shù)字
8、\\w表示字母、數(shù)字、下劃線[A-Za-z0-9_]
9、\\W表示匹配非字母、數(shù)字、下劃線
10、\\s匹配空白字符
11、\\S匹配非空白字符
2、sub()、gsub()
①共同點:
A、替換匹配字符
B、格式:gsub/sub(‘替換的目標(biāo)字符串”,"被替換的字符串",X)
其中,X為在該數(shù)據(jù)分為內(nèi)進(jìn)行匹配替換操作
②不同點:
sub():只替換第一次匹配的字符串
gsub():替換掉所有匹配的字符串
3、strsplit()
①格式:
strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
*strsplit()輸出結(jié)果的數(shù)據(jù)類型為list
*x為待分割的字符串,split為用什么進(jìn)行分割,可以用空格等分隔符號,輸入即可
Eg:
> tmp<-'1053_at,117_at,121_at,1255_g_at,1316_at,1320_at,1405_i_at,1431_at,1438_at,1487_at,1494_f_at,1598_g_at,160020_at,1729_at'
> class(tmp)
[1] "character"
> length(tmp)
[1] 1
> strsplit(tmp,split=',')
[[1]]
[1] "1053_at" "117_at" "121_at" "1255_g_at" "1316_at" "1320_at" "1405_i_at" "1431_at" "1438_at"
[10] "1487_at" "1494_f_at" "1598_g_at" "160020_at" "1729_at"
> strsplit(tmp,split=',')[[1]]
[1] "1053_at" "117_at" "121_at" "1255_g_at" "1316_at" "1320_at" "1405_i_at" "1431_at" "1438_at"
[10] "1487_at" "1494_f_at" "1598_g_at" "160020_at" "1729_at"
三、數(shù)據(jù)匹配
1、grep()、grepl()
①grep()函數(shù)
A、格式:
grep( array, function [, invert ],value=T )
輸入數(shù)據(jù)類型為array;如果參數(shù)invert為true,則結(jié)果數(shù)組將包含function返回false的所有元素。
B、輸出結(jié)果為返回位置;若value=T,則返回的就是匹配到的數(shù)值
②grepl() 返回結(jié)果為邏輯值
③nchar() 對查看字符個數(shù)(包括空格)
2、match()
①格式:
match(x,table)
A、在table中找到x ;
B、只返回第一個匹配的位置;
C、輸出結(jié)果的長度與x的長度一致
3、%in%
①格式:A%in%B
*返回數(shù)據(jù)類型為邏輯值
*輸出結(jié)果的數(shù)據(jù)長度與A的長度一致
Eg:
> 'EGF_12h'%in%tmp
[1] TRUE
> tmp%in%'EGF_12h'
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
> length(tmp)
[1] 12
> length('EGF_12h')
[1] 1
4、which()
①格式:
which(x, arr.ind = FALSE, useNames = TRUE)
*x為輸入數(shù)據(jù),數(shù)據(jù)類型為邏輯值
*返回結(jié)果為輸入數(shù)據(jù)為T時的元素位置;若arr.ind = T,數(shù)組的形式返回
Eg:
> which(tmp%in%c('EGF_12h','EGF_4h'))
[1] 1 2 3 10 11 12
> tmp[which(tmp=='EGF_12h')]
[1] "EGF_12h" "EGF_12h" "EGF_12h"
5、merge()
①格式:merge(x, y, ...)
*x/y的數(shù)據(jù)結(jié)構(gòu)都為data.frame
*merge是對待合并對象的列進(jìn)行合并;x、y列的長度需一致
*merge的輸出數(shù)據(jù)結(jié)構(gòu)為data.frame
②關(guān)于merge的幾個重要參數(shù)
by:當(dāng)merge的合并對象x,y的列名都相同時,則選擇by
by.x:是將待合并對象x中指定列的所有內(nèi)容都容納進(jìn)去
by.y:是將待合并對象y中指定列的所有內(nèi)容都容納進(jìn)去

