R语言初级教程(16): 数组

作者: R语言和Python学堂 | 来源:发表于2018-11-08 14:38 被阅读6次
R中的数据结构

在R中,向量(vector)是一维数据,矩阵(matrix)是二维数据。数组(array)是向量和矩阵的推广,是多维(三维或三维以上)数据。前面提到过,与向量和矩阵一样,数组的元素必须也是同一类型的数据。

下面将以三维数组为例,来了解一下在R中如何创建数组,最后介绍一个数组维度调换函数:aperm()。至于数组元素的访问、修改等内容,由于数组只是在矩阵基础上增加了维度而已,因此可参照矩阵相关内容,这里将不再介绍。

1. 创建数组

在R中,一般用array()函数来创建数组。array()的原型为:array(data = NA, dim = length(data), dimnames = NULL),其中:data给定数组元素,默认情况下是NAdim用来指定数组的维度,默认情况下是一维数组;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(data)    ##获取数组维度
[1] 2 3 4

## 添加各维度名称
> 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

2. aperm()函数

有时,我们想调换数组的维度,比如:将data变量的行维度(male, female)变为第三个维度;列维度(young, middle, old)变为行维度;第三个维度(A-D)变为列维度。在R中,可使用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

注意:各元素的位置也跟着相应改变了

有关数组的内容就讲到这。

如若有遗漏,后期将会添加至本博客。


感谢您的阅读!想了解更多有关R语言技巧,请关注我的微信公众号“R语言和Python学堂”,我将定期更新相关文章。

相关文章

  • R语言初级教程(16): 数组

    在R中,向量(vector)是一维数据,矩阵(matrix)是二维数据。数组(array)是向量和矩阵的推广,是多...

  • R语言 数组

    数组是可以在两个以上维度中存储数据的R数据对象。 例如 - 如果我们创建一个维度(2,3,4)的数组,则它创建4个...

  • R语言初级教程(18): 列表

    在这篇博客,你将学习如何在R中使用列表(list)。之前我们提过,列表可包含不同类型的元素,比如数字、字符串、向量...

  • R语言初级教程(23): 函数

    函数用于在逻辑上将我们的代码分解成更简单的部分,这些部分易于维护和理解。 1. 语法 在R中创建自己的函数非常简单...

  • R语言初级教程(07): 复数

    复数是实数的延伸。任一复数都可表达为a+bi,其中a和b都为实数,分别称为复数的实部和虚部;而i为虚数单位,它是-...

  • Day5—刘强

    R语言的数据结构 数据类型 R语言主要数据类型如下: 向量(vector) 矩阵(Matrix) 数组(Array...

  • R语言初级教程(14): 矩阵(中篇)

    这篇博客将介绍有关矩阵的一些操作,主要包括矩阵的基本运算、转置、内积、行列式、对角元素操作、逆、提取矩阵的上下三角...

  • R语言初级教程(13): 矩阵(上篇)

    R中有5种基本数据结构,分别是向量(vector)、矩阵(matrix)、数组(array)、数据框(data f...

  • R语言初级教程(11): 向量(下篇)

    这是最后一篇讲解有关向量操作的博客,介绍有关向量的函数,主要有: max(x):找出x向量中的最大值 min(x)...

  • R语言初级教程(10): 向量(中篇)

    这篇博客接着讲有关向量的操作,将主要讲: c()函数的参数 向量的基本运算 另外三种创建向量的方式:冒号:运算符、...

网友评论

    本文标题:R语言初级教程(16): 数组

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