03-02

作者: Everlyn | 来源:发表于2021-03-08 17:09 被阅读0次

    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

    相关文章

      网友评论

          本文标题:03-02

          本文链接:https://www.haomeiwen.com/subject/vwkhqltx.html