R中数据结构(数组)

数组

数组是一种存储数据的结构,向量是存储一维数据的结构,矩阵是存储二维数据的结构,数组可以在存储多维度数据。数组存储数据的方式是将一些具有相同属性的元素,集合在一起并对这个集合进行命名。这些集合又有相同的属性,又可以给这个大集合命名,依次类推,逐渐形成多维度数据结构。(数组中的数据必须是同一类型的数据)

数组的创建

array()函数

在R中,一般用array()函数来创建数组。array()的原型为:array(data = NA, dim = length(data), dimnames = NULL)

  • data给定数组元素,默认情况下是NA
  • dim用来指定数组的维度,默认情况下是一维数组
  • dimnames设定各维度的名称,必须是个列表,默认情况下无名称
> data <- array(1:24, 2:4)  ## 2x3x4的三维数组,元素为1到24的序列
> data
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 3

     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

获取数组维度

dim()函数

> dim(data)    ##获取数组维度
[1] 2 3 4

数组维度命名

dimname()函数

> dimnames(data)[[1]] <- c("male","female")
> dimnames(data)[[2]] <- c("young","middle","old")
> dimnames(data)[[3]] <- c("A","B","C","D")
> dimnames(data)  ##输出各维度的名称
[[1]]
[1] "male"   "female"

[[2]]
[1] "young"  "middle" "old"   

[[3]]
[1] "A" "B" "C" "D"

> data
, , A

       young middle old
male       1      3   5
female     2      4   6

, , B

       young middle old
male       7      9  11
female     8     10  12

, , C

       young middle old
male      13     15  17
female    14     16  18

, , D

       young middle old
male      19     21  23
female    20     22  24

将向量转为数组

向量是一维数据结构,数组是多维度数据结构,改变向量的维度即可实现将向量转换为数组。

dim()函数

> x <- 1:24   ##向量
> x
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
> is.array(x)  ##用is.array函数来判断是否为数组
[1] FALSE

> dim(x) <- c(2, 4, 3)  ##将向量x转化为数组
> x
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8

, , 2

     [,1] [,2] [,3] [,4]
[1,]    9   11   13   15
[2,]   10   12   14   16

, , 3

     [,1] [,2] [,3] [,4]
[1,]   17   19   21   23
[2,]   18   20   22   24

> is.array(x)
[1] TRUE

数组维度的改变

有时,我们想调换数组的维度,比如:将data变量的行维度(male, female)变为第三个维度;列维度(young, middle, old)变为行维度;第三个维度(A-D)变为列维度。在R中,可使用aperm()函数来实现这个功能。

aperm()函数

> data
, , A

       young middle old
male       1      3   5
female     2      4   6

, , B

       young middle old
male       7      9  11
female     8     10  12

, , C

       young middle old
male      13     15  17
female    14     16  18

, , D

       young middle old
male      19     21  23
female    20     22  24

> new.data <- aperm(data, c(2,3,1))  ##调换数组的维度,将data的行维度变为第三个维度;列维度变为行维度;第三个维度变为列维度
> new.data
, , male

       A  B  C  D
young  1  7 13 19
middle 3  9 15 21
old    5 11 17 23

, , female

       A  B  C  D
young  2  8 14 20
middle 4 10 16 22
old    6 12 18 24
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值