[GuangZhou_Biotrainee]R语言基础_2



—————————第一部分[三维数据结构]———————

一、三维数据结构
数组概况:

二维数据结构——矩阵

叠加二维矩阵(矩阵切片/吐司切面)

三维数据结构——array(吐司) 即dim(x,y,z)

数组的特殊形式 :二维 矩阵

array()

①格式:
array(data=NA,dim=length(data),dimnames=NULL)
array表示三维矩阵,所以array设置三层dim维数。

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

这里用两个,隔开,出现三个间隔,分别表示行、列、层。

二、apply()函数

①格式:
apply(x,mar,FUN)

①mar=1,代表行;mar=2,代表列;mar=3,代表层
②apply()函数的输入、输出值为规整的格式:array、data.frame

Eg:

z <- array(1:24, dim = 2:4)
apply(z,3,mean) 
三、lapply()函数及sapply()函数
1、lapply()

①格式:lapply(X,FUN)

说明:
A、关于X参数:
a、lapply中的x是对list中每一列的元素进行操作;若是矩阵,则对矩阵进行操作 以此类推
b、lapply中的x参数,只要是单位元素的 都可以加入
B、FUN可以是某一个函数

②输入的格式为list(行间数据类型不规整)
③输出数据类型为list
EG:

x <- list(1:10,2:8,5:7)
lapply(x,mean)
class(lapply(x,mean))     ##lapply返回结果为list
2、sapply()

①格式:sapply(X,FUN...,simplify=T)

simplify=T为默认设置;若simplify=F,则返回结果与lapply相同,输出的数类型据为list

②输出格式为:list(行间数据类型不规整)
③输出数据类型为矩阵 ;若输出数据类型为向量√,向量(一维矩阵)是矩阵中的特例



———————————第二部分[分组]———————————

一、因子

①格式:
factor(x = character(), levels, labels = levels,exclude = NA, ordered = is.ordered(x), nmax = NA)
②因子分为有序因子和无序因子;ordered=T为有序因子;ordered=F为无序因子
eg:

load('flag.Rdata')###加载要用的数据
####创建一个向量
topleft <- flag$topleft
table(flag$topleft)
class(flag$topleft)
set.seed(0709)
####源于向量的因子
topleft1 <- factor(topleft,ordered = TRUE)

结果:

③意义:
以GEO分析为例,对数据进行分组处理时,需将数据都转化为factor,才可以对数据进行分组(level
④所有的factor必须是level的元素

如上图,总结:

①一组数据包括两部分:
上面的内容为factor,下面的分组种类信息为level
level为上面所有内容的unique
③图示说明:
理论:

总况

举例:
举例

④factor与level为对应关系;若数据类型为character,则没有level
⑤level排序可以影响图片的顺序

可参考:
http://blog.sina.com.cn/s/blog_6cb445270102yjxa.html
https://blog.csdn.net/hsdcc217/article/details/78510087

二、split()函数

①格式:
split(x,f,drop=F,...)

①x是待分组数据,f是分组依据,drop=T为删除不存在的level
②因子f与待分组数据x长度应一致
③因子f是分组依据,分组依据可有多个标准,该标准用list承接;分组依据的组合为图一的组合搭配所示,若1-A有结果则输出结果;若1-A未匹配出结果,则输出integer(0)
④数据格式:待分组数据x的数据类型为data.frame ;输出结果的数据类型为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()的基础上进一步分析,添加“FUN”
①格式:
tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)

①X是待分组数据
②INDEX是分组信息(可以有几个因子,用list承接组合因子即可)
③A与B可以没关系 但是长度一样
④FUN为计算函数

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


——————————第三部分[循环函数]———————————

一、while()

①格式:
while(i){XX
i*}

①i是设置循环数,返回结果是一个逻辑值;xx是执行的一个操作,为逻辑操作;而i*是对i作出的更改,否则就近进入一个死循环
②break,next可以嵌套在while中使用

②while()循环中,数据输入为真 ,输出为假
③while()是一个循环操作,如果要得到一个输出结果需要有一个容器接住。所以,在运用while函数时,要先了解、熟悉while的输出结果,创建一个空的数据结构,接住while的输出结果(如:tmp<-c()
Eg:

> i <- 1
> #####熟悉会产生什么结果,创建相应大小的数据结构
> tmp <- c()
> while (i <=6) {
+   tmp[i]<- letters[i]
+   i = i+1####要有这种设置,才会对i产生改变,才不会是死循环
+ }
> tmp
[1] "a" "b" "c" "d" "e" "f"
二、ifelse()

①格式:
ifelse(test, yes, no)
②if:只是处理第一个元素,若为真,就输出结果;处理的是多个一个逻辑值,得到的是一个输出
③ifelse:是处理一串逻辑值,得到一串输出结果;
④注意其中的嵌套ifelse (逻辑缜密一些);若嵌套,则从里到外一层层看



——————————第四部分[数据处理]———————————

一、排序
1、sort、order、rank区别

基础数据:input输入数据
sort:返回结果为排序后的数值;返回数值结果默认升序
order:返回结果output中的数据应来源于input的位置信息(为位置信息,不非具体数值);将sort的输出结果递进;可作用于多个向量
rank:返回结果input的排名(为位置信息,不非具体数值);

2、全集、交集、差集

union(a,b) : a与b的全集
intersect(a, b): a与b的交集
setdiff(a, b) : 差集a有 ,b没有;返回的是去重结果
setdiff(b, a) : 差集b有,a没有;返回的是去重结果

相关的理解代码请看:
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、字符串符号_常用总结

1、[^]取反
2、{}匹配次数设置
3、$字符位于字符尾部;尾部
4、^后面字符位于字符首位;
首位
5、^t后面字符位于字符首位
6、\\d表示数字

7、\\D表示非数字
8、\\w表示字母、数字、下划线[A-Za-z0-9_]
9、\\W表示匹配非字母、数字、下划线
10、\\s匹配空白字符
11、\\S匹配非空白字符

2、sub()、gsub()

①共同点:
A、替换匹配字符
B、格式:gsub/sub(‘替换的目标字符串”,"被替换的字符串",X)
其中,X为在该数据分为内进行匹配替换操作
②不同点:
sub():只替换第一次匹配的字符串
gsub():替换掉所有匹配的字符串

3、strsplit()

①格式:
strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)

*strsplit()输出结果的数据类型为list
*x为待分割的字符串,split为用什么进行分割,可以用空格等分隔符号,输入即可

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"  
三、数据匹配
1、grep()、grepl()

①grep()函数
A、格式:
grep( array, function [, invert ],value=T )

输入数据类型为array;如果参数invert为true,则结果数组将包含function返回false的所有元素。

B、输出结果为返回位置;若value=T,则返回的就是匹配到的数值
②grepl() 返回结果为逻辑值
③nchar() 对查看字符个数(包括空格)

2、match()

①格式:
match(x,table)

A、在table中找到x ;
B、只返回第一个匹配的位置;
C、输出结果的长度与x的长度一致

3、%in%

①格式:A%in%B

*返回数据类型为逻辑值
*输出结果的数据长度与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为输入数据,数据类型为逻辑值
*返回结果为输入数据为T时的元素位置;若arr.ind = T,数组的形式返回

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的数据结构都为data.frame
*merge是对待合并对象的进行合并;x、y列的长度需一致
*merge的输出数据结构为data.frame

②关于merge的几个重要参数

by:当merge的合并对象x,y的列名都相同时,则选择by
by.x:是将待合并对象x中指定列的所有内容都容纳进去
by.y:是将待合并对象y中指定列的所有内容都容纳进去

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342