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