美文网首页
R语言基础教程 | 数据结构—向量

R语言基础教程 | 数据结构—向量

作者: 生信师姐 | 来源:发表于2021-06-09 07:52 被阅读0次

    一、简介

    R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同。下图给出了这些数据结构的一个示意图。

    图片

    对于数据的运算,和其他语言差不多。

    图片

    一、创建向量

    1. c()

    向量的创建向量是用于存储数值型、字符型逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。各类向量如下例所示:

    > a <- c(1,2,3,4,5,6)
    > b <- c("aaa","bbb","ccc")
    > c <- c(TRUE,FALSE)
    

    这里,a是数值型向量,b是字符型向量,而c是逻辑型向量。注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。

    使用的冒号用于生成一个数值序列。例如,a <- c(2:6)等价于a <- c(2,3, 4, 5, 6)。

    > a <- c(2:6)
    > a
    [1] 2 3 4 5 6
    
    
    > b <- c(2,3, 4, 5, 6)
    > b
    [1] 2 3 4 5 6
    

    2.创建向量的函数seq()函数

    (1) seq()函数可以用来创建向量,下面是创建1-9,步长为2 向量

    > v1 = seq(1,9,by =2)
    > v1
    [1] 1 3 5 7 9
    

    (2) 也可以不指定步长,指定个数,R会自己计算步长

    > seq(0, 1, length.out = 11)
     [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
    

    (3) 如果不写开始的数和步长,默认从1开始,步长为1

    > seq(17)
     [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17
    
    > seq(-6)
    [1]  1  0 -1 -2 -3 -4 -5 -6
    

    (4) 不指定起始值,就不能定义步长

    > seq(9,by=2)
    错误于seq.default(9, by = 2) : 'by'参数的正負號不对
    

    更多seq()的使用方法通过help("seq")查看。

    ## Default S3 method:
    seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),
        length.out = NULL, along.with = NULL, ...)
    seq.int(from, to, by, length.out, along.with, ...)
    seq_along(along.with)
    seq_len(length.out)
    

    二、访问向量中的元素

    通过在方括号中给定元素所处位置的数值,我们可以访问向量中的元素。例如,a[c(2, 4)]用于访问向量a中的第二个和第四个元素。

    > a <- c(1,2,3,4,5,6)
    
    
    > a[1:3]
    [1] 1 2 3
    
    
    > a[c(1,3)]   # 给了一个向量c()
    [1] 1 3
    

    三、向量的其他操作

    1. rep()函数

    rep()函数可以用来重复复制元素。

    # 把1重复五遍
    > rep(1,5)         
    [1] 1 1 1 1 1
    
    
    > v1 <-c(11,12,13,14,15)
    > rep(v1,2)
     [1] 11 12 13 14 15 11 12 13 14 15
    
    
    # 1-4重复2次
    > rep(1:4, 2)
    [1] 1 2 3 4 1 2 3 4
    
    # 1-4的每个元素重复2次,注意和上面的区别
    > rep(1:4, each = 2)
    [1] 1 1 2 2 3 3 4 4
    
    # 指定每个元素的重复次数
    > rep(1:4, c(2,2,2,2))
    [1] 1 1 2 2 3 3 4 4
    
    #指定每个元素的重复次数
    > rep(1:4, c(2,1,2,1))
    [1] 1 1 2 3 3 4
    
    # each = 2指定了1-4每个元素重复2次,理论上有8个元素,但又指定的元素的总长度len = 4,因此后面的3 3 4 4没有显示。
    > rep(1:4, each = 2, len = 4)
    [1] 1 1 2 2
    
    
    # 指定了总长度为len = 10,但rep(1:4, each = 2)的结果只要8个元素。不足10个,会从头自动补齐。所以多了1 1.
    > rep(1:4, each = 2, len = 10)
     [1] 1 1 2 2 3 3 4 4 1 1
    
    # 先每个元素重复2次后,再重复3次
    > rep(1:4, each = 2, times = 3)
     [1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4
    

    2. c() 向量连接

    要注意的是,向量连接只能用于同一类型的数据,同为数值,同为字符串或布尔值。

    > c1 <- c(1,2,3,4)
    > c1
    [1] 1 2 3 4
    > c2<- c(5,6,7,8)
    > c2
    [1] 5 6 7 8
    
    
    > c3 <- c(c1,c2)
    > c3 
    [1] 1 2 3 4 5 6 7 8
    

    3. 向量拼接

    # 按列拼接
    > cbind(c1,c2)
         c1 c2
    [1,]  1  5
    [2,]  2  6
    [3,]  3  7
    [4,]  4  8
    
    # 按行拼接
    > rbind(c1,c2)
       [,1] [,2] [,3] [,4]
    c1    1    2    3    4
    c2    5    6    7    8
    

    4. 向量运算

    长度相等的向量进行加减乘除运算时,对应元素进行相应的运算

    > c1 <- c(1,2,3,4)
    > c2<- c(5,6,7,8)
    > c1+c2
    [1]  6  8 10 12
    > c1*c2
    [1]  5 12 21 32
    > c1/c2
    [1] 0.2000000 0.3333333 0.4285714 0.5000000
    

    如果2个向量长度不等,会按照短的向量重复运算补齐

    > c3 <- c(c1,c2)
    > c1+c3
    [1]  2  4  6  8  6  8 10 12
    

    转自:https://mp.weixin.qq.com/s?__biz=MzA4NDAzODkzMA==&mid=2651263668&idx=1&sn=879cecbb60a399ddfcb9329dd54f1c91&chksm=841ef6c9b3697fdf1955c64a02818fda7be681db94447ddeceeffc8e9d467bf089ff1dd9a308&scene=21#wechat_redirect

    相关文章

      网友评论

          本文标题:R语言基础教程 | 数据结构—向量

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