R语言数据结构(矩阵)

1 .定义

具有行数和列数的一个规则的二维表。

2. 矩阵的创建

2.1 matrix()函数

在R语言中使用,matrix()函数创建矩阵。matrix()的原型为:matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)。

data:包含了矩阵的元素,一般是个向量,默认情况下是NA。

nrow和ncol:设定矩阵的行、列数目;一般这两个值只需设定 一个,另一个值可以根据元素的数目自动给出。

byrow:设定矩阵是按行(byrow=TRUE)填充还是按列(byrow=FALSE)填充,默认是按照列进行填充的

dimnames:包含了以字符型向量表示的行名和列名,是一个列表,默认情况下没有行列名。

2.2 例子

> mat1 <- matrix(1:6, nrow=2)   ##默认按列填充
> mat1
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> mat2 <- matrix(1:6, nrow=2, byrow=TRUE)   ##设定byrow=TRUE按行填充
> mat2
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

> rnames <- c('R1', 'R2')   ##行名
> cnames <- c('C1', 'C2', 'C3')  ##列名
> mat3 <- matrix(1:6, nrow=2, dimnames=list(rnames, cnames))   ##通过设定dimnames参数添加行列名
> mat3
   C1 C2 C3
R1  1  3  5
R2  2  4  6

也可以通过使用rownames()、colnames()函数来给矩阵添加行、列名

###也可通过使用rownames()、colnames()函数来给矩阵添加行、列名
> rownames(mat) <- c('r1', 'r2')    ##添加行名
> colnames(mat) <- c('c1', 'c2', 'c3')   ##添加列名
> mat
   c1 c2 c3
r1  1  2  3
r2  4  5  6

2.2 dim()函数

也可以通过使用dim()函数来创建矩阵,其原理是通过改变维度是向量变为矩阵。

2.2.1 例子

> mat4 <- 1:6   ##向量
> dim(mat4) <- c(3, 2)  ##变为3行2列的矩阵
> is.matrix(mat4)   ##判断是否为矩阵
[1] TRUE
> mat4      ##默认按列填充
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

2.3 矩阵的转置

将矩阵的行列数进行对换。

2.3.1 t()函数

2.3.1.1 例子

> mat4 <- 1:6
> dim(mat4) <- c(2, 3)   ##与上面不一样
> mat4 <- t(mat4)   ##矩阵转置
> mat4   ##按行填充
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6

3. 矩阵的属性

矩阵的属性包括元素的的数据类型(integer)、矩阵的维度、元素的个数等。

> mat <- matrix(1:6, nrow=2, dimnames=list(rnames, cnames)) 
> mat
   C1 C2 C3
R1  1  3  5
R2  2  4  6
> class(mat)  ##结构类型
[1] "matrix"
> typeof(mat)  ##元素数据类型
[1] "integer"
> dim(mat)  ##维度,2行3列
[1] 2 3
> length(mat)  ##元素个数
[1] 6
> rownames(mat)  ##获取行名
[1] "R1" "R2"
> colnames(mat)  ##获取列名
[1] "C1" "C2" "C3"

3.1 访问矩阵中的元素

先生成一个矩阵

>mat<-matrix(1:9,nrow=3,ncol=3,dimname=list(c('r1','r2','r3'),c('c1','c2','c3'))
>mat
>   c1 c2 c3
r1  1  4  7
r2  2  5  8
r3  3  6  9

3.2 访问某行元素

>mat[2,]           #访问第二行元素
>c1 c2 c3 
 2  5  8 
>mat['r2']         #通过行名称,访问第二行元素
>c1 c2 c3 
 2  5  8 

3.3 访问某列元素

>mat[,2]           #访问第二列元素
>r1 r2 r3 
 4  5  6 
 >mat[,'c2']       #通过列名称,访问第二列的元素
 >r1 r2 r3 
 4  5  6 

3.4 访问某一个元素

>mat[2,2] mat        #访问第2行第2列元素
[1] 5
> mat['r2', 'c2']    #通过行、列名称,访问第二行第二列的元素
[1] 5

当使用行或列的名称,访问元素时,注意符号‘’
值得注意的是,当用上面的方式获取某个某行某列元素时,返回的是一个向量

3.4.1使返回的对象转变为矩阵

> mat[2, 2, drop=FALSE]
   c2
r2  5
> mat[2, , drop=FALSE]
   c1 c2 c3
r2  2  5  8

> is.matrix(mat[2, 2, drop=FALSE])   ##返回的是个矩阵
[1] TRUE
> is.matrix(mat[2, , drop=FALSE])   ##返回的是个矩阵
[1] TRUE

通过将参数drop设定为FALSE,返回的将会是个矩阵

3.5 访问部分元素

> mat[c(2, 3), c(2, 3)]  ##访问第2、3行第2、3列元素,返回为矩阵
   c2 c3
r2  5  8
r3  6  9
> mat[c('r2','r3'), c('c2','c3')]
   c2 c3
r2  5  8
r3  6  9

访问部分元素时,返回的对象是矩阵。

4. 修改矩阵中的元素

先生成一个矩阵

>mat<-matrix(1:9,nrow=3,ncol=3,dimname=list(c('r1','r2','r3'),c('c1','c2','c3'))
>mat
>   c1 c2 c3
r1  1  4  7
r2  2  5  8
r3  3  6  9

4.1 修改某一个元素

> mat[2, 2] <- 20   ##将第2行第2列元素改为20
> mat
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2   20    8
[3,]    3    6    9

4.2 修改某一行/列的元素

> mat[ ,3] <- 10   ##将第3列元素都改为10
> mat
     [,1] [,2] [,3]
[1,]    1    4   10
[2,]    2   20   10
[3,]    3    6   10

4.3 删除元素

> mat <- mat[-2, ]   ##删掉第二行
> mat
     [,1] [,2] [,3]
[1,]    7    7   10
[2,]    7    6   10

4.4 通过逻辑条件修改元素

> mat[mat<6] <- 7   ##将小于6的元素都改为7
> mat
     [,1] [,2] [,3]
[1,]    7    7   10
[2,]    7   20   10
[3,]    7    6   10

4.5 通过rbind()和cbind()函数可添加行和列

> mat <- matrix(1:9, nrow=3) 
> mat
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

> rbind(mat, c(12, 13, 14))   ##在原矩阵mat后面添加一行
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
[4,]   12   13   14

> cbind(mat, c(12, 13, 14))   ##在原矩阵mat后面添加一列
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   12
[2,]    2    5    8   13
[3,]    3    6    9   14

发布了9 篇原创文章 · 获赞 0 · 访问量 85

猜你喜欢

转载自blog.csdn.net/qq_40993358/article/details/105645763
今日推荐