03-02

2021-03-08  本文已影响0人  Everlyn

PPT 01 向量

3-2-1向量精讲

1. 逻辑型数据

1.比较运算的结果是逻辑值

,<,<=,>=,==(是否等于),!=(是否不相等)

2.逻辑运算 多个逻辑条件的连接
与& 有一个结果是F,最终为F
或 | 有一个结果是T,最终为T
非 ! !4>5 T

2. 数据类型的判断与转换

  1. is 族函数,判断,返回值为T或F
    is.numeric() 是否数值型数据
    is.logical() 是否逻辑型数据
    is.character() 是否字符型数据
    2.as 族函数实现数据类型之间的转换
    as.numeric() 将其他数据类型转换为数值型
    as.logical() 将其他数据类型转换为逻辑型
    as.character() 将其他数据类型转换为字符型
>  as.numeric(3)
[1] 3
> as.logical(3>5)
[1] FALSE
> as.character("a")
[1] "a"
> as.logical("jimmy")
[1] NA

3.多个数据如何组织?

1.数据结构:
向量:数据框中单独的一列,每一列属于同一种数据类型,可以有重复值
数据框:约等于“表格”,是R语言内部存在的一种结构,不是真实存在的
矩阵
列表

4.切换Rproject

  1. 当没有打开Rstudio时:找到下载好的文件夹,双击立方体浅蓝色图标(.Rproj),直接打开;
  2. 已经打开了Rstudio:在切换Rproject 之前,检查当前打开的是否需要清空或保存(脚本、变量、图片)File--open project--找到对应文件夹--选中需要的Rproject,点击打开。
    ·过程中有任何弹窗都选取消 No/ don't save
    ·如果Rstudio运行特别慢,可删除.Rdata 这个文件
    3.脚本的正确打开方式:从右下角文件面板单击打开xx.R
    4.脚本打开是乱码的解决方案:file--open with encoding--UTF-8--OK

2.1向量的生成

1.用 c( ) 逐一放到一起

c(2,5,6,2,9) #数值型向量
c("a","f","md","b") #字符串数据形成的向量
·规则:只允许同一种数据类型,且允许重复值存在

2.连续的数字用冒号“:”

> 1:5
[1] 1 2 3 4 5  

3.有重复的用rep(),有规律的序列用seq(),随机数用rnorm

> rep("gene",times=3)  #基因这个字符串重复三次
[1] "gene" "gene" "gene"

> seq(from=3,to=21,by=3) #sequence 3,6,9,--21
[1]  3  6  9 12 15 18 21

> rnorm(n=3) #随机数(多种随机数重的一种)
[1] -0.8136543 -0.9632929  1.2423969

4.通过组合,产生更为复杂的向量。

paste0(rep("gene",times=3),1:3)


image.png

练习2-2: 向量生成

1.将两种不同类型的数据用c()组合在一起,看输出结果

> c(3,"a")
[1] "3" "a"

--数值型-逻辑型-字符型


image.png

2.生成1到30之间所有4的倍数,答案是
4,8,12,16,20,24,28

> seq(from=4,to=28,by=4)
[1]  4  8 12 16 20 24 28

3.生成sample4,sample8,sample12…sample28

> paste0(rep("sample",times=7),seq(from=4,to=28,by=4))
[1] "sample4"  "sample8"  "sample12" "sample16" "sample20" "sample24" "sample28"

3-2-2 向量取子集

2.2对单个向量进行的操作

(1)赋值给一个变量名

x = c(1,3,5,1) #随意的写法 等号
x <- c(1,3,5,1) #规范的赋值符号  Alt/command+减号

赋值符号不能替代等号,等号可以替代赋值符号。
x为变量名,通常不用C,因为C是个已知的函数
向量由元素组成

赋值与输出一起进行
(x <- c(1,3,5,1)) 或x <- c(1,3,5,1);x
> x <- c(1,3,5,1);x
[1] 1 3 5 1
> (x <- c(1,3,5,1))
[1] 1 3 5 1

(2)简单数学计算

> x+1
[1] 2 4 6 2
> log(x)
[1] 0.000000 1.098612 1.609438 0.000000
> sqrt(x)
[1] 1.000000 1.732051 2.236068 1.000000

(3)根据某条件进行判断,生成逻辑型向量

> x>3
[1] FALSE FALSE  TRUE FALSE
> x==3
[1] FALSE  TRUE FALSE FALSE

(4)初级统计

> max(x) #最大值
[1] 5
> min(x) #最小值
[1] 1
> mean(x) #均值
[1] 2.5
> median(x) #中位数
[1] 2
> var(x) #方差
[1] 3.666667
> sd(x) #标准差
[1] 1.914854
> sum(x) #总和
[1] 10
> length(x) #长度 向量的长度等于向量里面元素的个数
[1] 4

> unique(x) #去重复 只保留每个数字第一次出现的结果,第二次以后被去掉
[1] 1 3 5

> duplicated(x) #判断对应元素是否重复 返回结果为逻辑值的函数
[1] FALSE FALSE FALSE  TRUE
> !duplicated(x)
[1]  TRUE  TRUE  TRUE FALSE

> table(x) #重复值统计 变量有哪些个取值,分别重复了几次
x
1 3 5 
2 1 1 

> sort(x) # 排序(默认从小到大)
[1] 1 1 3 5
> sort(x,decreasing = T) # 从大到小进行排列
[1] 5 3 1 1 

2.3对两个向量进行的操作

x = c(1,3,5,1)
y = c(3,2,5,6)

(1)逻辑比较,生成等长的逻辑向量

> x == y #按位置对应
[1] FALSE  FALSE  TRUE FALSE

> x %in% y #x中的元素在y中吗(以X为中心)
[1] FALSE  TRUE  TRUE FALSE
Screen Shot 2021-03-09 at 8.18.43 PM.png

(2)数学计算

> x + y
[1]  4  5 10  7

(3)“连接“

> paste(x,y,sep=":")
[1] "1:3" "3:2" "5:5" "1:6"

(4)交集、并集、差集

> intersect(x,y)#交集
[1] 3 5

> union(x,y)#并集
[1] 1 3 5 2 6

> setdiff(x,y)#谁在前面谁是核心
[1] 1
> setdiff(y,x)
[1] 2 6
当两个向量长度不一致
> x = c(1,3,5,6,2)
> y = c(3,2,5)
> x == y # 啊!warning!元素个数不同
[1] FALSE FALSE  TRUE FALSE  TRUE
Warning message:
In x == y : longer object length is not a multiple of shorter object length#可以直接忽略
利用循环补齐简化代码
> paste0(rep("gene",3),1:3)
[1] "gene1" "gene2" "gene3"
> paste0("gene",1:3)
[1] "gene1" "gene2" "gene3"

2.4.向量筛选(取子集)

[ ]可以将TRUE对应的值挑选出来,舍去FAUSE对应的值

根据逻辑值取子集:中括号中是与X等长的逻辑值向量
> x <- 8:12
> x[x==10]
[1] 10
> x[x<12]
[1]  8  9 10 11
> x[x %in% c(9,13)]
[1] 9
image.png
根据位置取子集:中括号中是由X的下标组成的向量
> x[4]
[1] 11
> x[2:4] #中括号中内容为向量
[1]  9 10 11
> x[c(1,5)]
[1]  8 12
> x[-4]#去掉第4个,负号代表-反选
[1]  8  9 10 12
> x[-(2:4)]#反选1和5即去掉234,注意加( )
[1]  8 12
image.png

2.5.修改向量中的某个/某些元素:取子集+赋值

> x
[1]  8  9 10 11 12
> #改一个元素
> x[4] <- 40
> x
[1]  8  9 10 40 12

> #改多个元素
> x[c(1,5)] <- c(80,20)

R语言中所有的修改都需要赋值,没有赋值就是没有发生过

2.6 简单向量作图

> k1 = rnorm(12);k1
 [1]  1.5583335 -0.7994595 -2.2489812  0.2934504 -0.7207822 -0.8936053 -0.1428870
 [8]  0.3675650  0.5910372  1.3081505 -0.3873457 -1.4224317
> plot(k1)
image.png

K1为纵坐标,横坐标是默认生成的
引入K2时

> k2 = rep(c("a","b","c","d"),each = 3);k2
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d"
> boxplot(k1~k2) #boxplot需要1个分组向量+1个数值型向量
image.png

K1为纵坐标,横坐标

练习2-4

#练习2-4
> # 1.将基因名"ACTR3B","ANLN","BAG1","BCL2","BIRC5","RAB","ABCT","ANLN","BAD","BCF","BARC7","BALV"组成一个向量,赋值给x
> x=c("ACTR3B","ANLN","BAG1","BCL2","BIRC5","RAB","ABCT","ANLN","BAD","BCF","BARC7","BALV")
> # 2.用函数计算向量长度
> length(x)
[1] 12
> # 3.用向量取子集的方法,选出第1,3,5,7,9,11个基因名。
> x[c(1,3,5,7,9,11)]
[1] "ACTR3B" "BAG1"   "BIRC5"  "ABCT"   "BAD"    "BARC7" 
> # 4.用向量取子集的方法,选出除倒数第2个以外所有的基因名。
> x[-(length(x)-1)]
[1] "ACTR3B" "ANLN"   "BAG1"   "BCL2"   "BIRC5"  "RAB"    "ABCT"   "ANLN"   "BAD"   
[10] "BCF"    "BALV"  
> # 5.用向量取子集的方法,选出出在c("ANLN", "BCL2","TP53")中有的基因名。
> # 提示:%in%
> y=c("ANLN", "BCL2","TP53")
> y[y%in%x]#错
[1] "ANLN" "BCL2"
> x[x%in%y]#对
[1] "ANLN" "BCL2" "ANLN"
> # 6.修改第6个基因名为"a"并查看是否成功
> x[6] <- "a" 
> # 7.生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,筛出其中小于-2的值
> b=rnorm(10,0,18)
> b[b< -2]
[1] -18.284365 -14.128090 -12.808250 -23.562116  -2.343119 -23.283583 -14.128393
> # 6.修改第6个基因名为"a"并查看是否成功
> x[6] <- "a" 
> #7.生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
> z = rnorm(n=10,mean=0,sd=18)
> z[z< -2]
[1] -14.01877 -11.14345 -28.35111 -11.65444 -11.99324
paste与paste0区别
> paste("gene",1:3)
[1] "gene 1" "gene 2" "gene 3"
> paste0("gene",1:3)
[1] "gene1" "gene2" "gene3"

> paste("gene",1:3,sep="jimmy")
[1] "genejimmy1" "genejimmy2" "genejimmy3"

> paste("gene",1:3,sep="")#与paste0("gene",1:3)结果一致,即分隔符中没有任何东西
[1] "gene1" "gene2" "gene3"

paste0后无SEP

2.7如何调整元素顺序

向量匹配排序-match

> x<-c("A","B","C","D","E");x
[1] "A" "B" "C" "D" "E"
> x[c(2,4,5,1,3)]
[1] "B" "D" "E" "A" "C"
> y<-c("B","D","E","A","C");y
[1] "B" "D" "E" "A" "C"
> #根据Y生成ABCDE,即把Y变得和X一样
> y[c(4,1,5,2,3)]
[1] "A" "B" "C" "D" "E"
> #向量匹配排序-match
> x<-c("A","B","C","D","E")
> y<-c("B","D","E","A","C");
> match(x,y)#取子集,使Y变得和X一样
[1] 4 1 5 2 3#Y的下标(逗号后面向量的)
image.png image.png

向量进阶小问题

1.如何将两个向量合到一起,组成一个长向量?

> x=c(1,3,5)
> y=c(2,3,4)
> test=c(x,y)
> test
[1] 1 3 5 2 3 4

2.如何在向量首/尾增加一个元素?

> x=c(3,x)
> x
[1] 3 1 3 5
> x=c(x,4);x
[1] 3 1 3 5 4

3.如何在向量第n位增加一个元素?

> n=3
> x=c(1,3,5,8,6)
> y=c(x[1:n-1],7,x[n:length(x)]);y
[1] 1 3 7 5 8 6
#写成函数
> join<-function(x,n,y){c(x[1:n-1],7,x[n:length(x)])}
> x=c(1,3,5,8,6)
> join(x,3,7)
[1] 1 3 7 5 8 6

4.如果向量x和y内容一致但顺序不一致,如何按照x的顺序重排y

> x=letters[1:5]
> y=letters[c(3,1,2,5,4)]
> match(x,y)
[1] 2 3 1 5 4
> y[match(x,y)]
[1] "a" "b" "c" "d" "e"

53:02s开始

PPT 02 数据结构

> c(1,4,5,23,5,7,6)
[1]  1  4  5 23  5  7  6
> sample(1:100,7)# 代表1到100随机取7个数,前是取样的范围,后是取样个数,取样是不放回的,不会存在任何重复
[1] 61 19 41 72 48 44 84

矩阵

> x= sample(1:100,28)
> x# 是一个向量
 [1] 13 69 87  9 78 89 68 72 32 65 77 38 97 49 16 41 82 71 83 14 10 18 42 56 50 40 12
[28] 93
> matrix(x,nrow = 7)#是一个矩阵,有两个维度 row 表示行
     [,1] [,2] [,3] [,4]
[1,]   13   72   16   18
[2,]   69   32   41   42
[3,]   87   65   82   56
[4,]    9   77   71   50
[5,]   78   38   83   40
[6,]   89   97   14   12
[7,]   68   49   10   93
> matrix(x,ncol = 7)#  col 表示列
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]   13   78   32   97   82   10   50
[2,]   69   89   65   49   71   18   40
[3,]   87   68   77   16   83   42   12
[4,]    9   72   38   41   14   56   93

长度和数据类型都相同的向量组成矩阵

> x1=sample(1:100,7);x1
[1] 40 56 74 64 77 27 24
> x2=11:17;x2
[1] 11 12 13 14 15 16 17
> x3=sample(1:10,7);x3
[1]  6  4  9  3  5  7 10
#共同点:结果都是数值型向量,长度相同
> cbind(x1,x2,x3)
     x1 x2 x3
[1,] 40 11  6
[2,] 56 12  4
[3,] 74 13  9
[4,] 64 14  3
[5,] 77 15  5
[6,] 27 16  7
[7,] 24 17 10
image.png

长度相同,数据类型不同的向量组成矩阵

> y1=sample(1:100,7);y1
[1] 27 78 57 68 24 85 28
> y2=letters[1:7];y2
[1] "a" "b" "c" "d" "e" "f" "g"
> y3=sample(1:10,7);y3
[1] 5 1 7 9 2 4 6
>   data.frame(y1,y2,y3)
y1 y2 y3
1 27  a  5
2 78  b  1
3 57  c  7
4 68  d  9
5 24  e  2
6 85  f  4
7 28  g  6
image.png

list列表:长度及数据类型均可以不同,兼容并包,可以由数据框,向量,矩阵两两或多个自由组合而成

image.png image.png

1是向量,2是数据框,3是矩阵,4是列表

数据框和矩阵在R中有两种显示形式

预览模式:有格子;
控制台模式:没格子
当对数据框或者矩阵进行赋值后,它就会出现在environment列表里,点 df


image.png
上一篇下一篇

猜你喜欢

热点阅读