你好,欢迎访问远方教程PC版!
广告位招租

一篇关于R矩阵操作总结的神文(终结篇) (第2页)

[日期:2015-07-19]   来源:远方教程  作者:远方教程   阅读:19459次[字体: ] 访问[旧版]
 捐赠远方教程 


下面开始学习:

1 矩阵基本操作

1.1创建向量

R里面有多种方法来创建向量(Vector),最简单的是用函数c()。例如:

>X=c(1,2,3,4)

>X

[1] 1 2 3 4

当然,还有别的方法。例如:

>X=1:4

>X

[1] 1 2 3 4

还有seq()函数。例如:

> X=seq(1,4,length=4)

> X

[1] 1 2 3 4

注意一点,R中的向量默认为列向量,如果要得到行向量需要对其进行转置。
 
1.2创建矩阵

R中创建矩阵的方法也有很多。大致分为直接创建和由其它格式转换两种方法。

1.2.1直接创建矩阵

最简单的直接创建矩阵的方法是用matrix()函数,matrix()函数的使用方法如下:

> args(matrix)

function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

NULL

其中,data参数输入的为矩阵的元素,不能为空;nrow参数输入的是矩阵的行数,默认为1;ncol参数输入的是矩阵的列数,默认为1;byrow参数控制矩阵元素的排列方式,TRUE表示按行排列,FALSE表示按列排列,默认为FALSE;dimnames参数输入矩阵的行名和列名,可以不输入,系统默认为NULL。例如:

> matrix(1:6,nrow=2,ncol=3,byrow=FALSE)

      [,1]  [,2]  [,3]

[1,]    1    3    5

[2,]    2    4    6

改变矩阵的行数和列数:

> matrix(1:6,nrow=3,ncol=2,byrow=FALSE)

    [,1]   [,2]

[1,]    1    4

[2,]    2    5

[3,]    3    6

改变byrow参数:

> matrix(1:6,nrow=3,ncol=2,byrow=T)

     [,1]   [,2]

[1,]    1    2

[2,]    3    4

[3,]    5    6

设定矩阵的行名和列名:

> matrix(1:6,nrow=3,ncol=2,byrow=T,dimnames=list(c("A","B","C"),c("boy","girl")))

  boy  girl

A   1    2

B   3    4

C   5    6

1.2.2 由其它格式转换

也可以由其它格式的数据转换为矩阵,此时需要用到函数as.matrix()。

1.3 查看和改变矩阵的维数

矩阵有两个维数,即行维数和列维数。在R中查看矩阵的行维数和列维数可以用函数dim()。例如:

> X=matrix(1:12,ncol=3,nrow=4)

> X

     [,1] [,2] [,3]

[1,]    1    5    9

[2,]    2    6   10

[3,]    3    7   11

[4,]    4    8   12

> dim(X)

[1] 4 3

只返回行维数:

> dim(X)[1]

[1] 4

也可以用函数nrow()

> nrow(X)

[1] 4

只返回列维数:

> dim(X)[2]

[1] 3

也可以用函数ncol():

> ncol(X)

[1] 3

同时,函数dim()也可以改变矩阵的维数。例如:

> dim(X)=c(2,6)

> X

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

[1,]    1    3    5    7    9   11

[2,]    2    4    6    8   10   12

1.4矩阵行列的名称

查看矩阵的行名和列名分别用函数rownames()和函数colnames()。例如:

> X=matrix(1:6,nrow=3,ncol=2,byrow=T,dimnames=list(c("A","B","C"),c("boy","girl")))

> X

  boy girl

A   1    2

B   3    4

C   5    6

查看矩阵的行名:

> rownames(X)

[1] "A" "B" "C"

查看矩阵的列名:

> colnames(X)

 [1] "boy"  "girl"

同时也可以改变矩阵的行名和列名,比如:

>  rownames(X)=c("E","F","G")

> X

  boy girl

E   1    2

F   3    4

G   5    6

> colnames(X)=c("man","woman")

> X

  man woman

E   1     2

F   3     4

G   5     6

1.5 矩阵元素的查看及其重新赋值

查看矩阵的某个特定元素,只需要知道该元素的行坐标和列坐标即可,例如:

> X=matrix(1:12,nrow=4,ncol=3)

> X

     [,1] [,2] [,3]

[1,]    1    5    9

[2,]    2    6   10

[3,]    3    7   11

[4,]    4    8   12

查看位于矩阵第二行、第三列的元素:

> X[2,3]

[1] 10

也可以重新对矩阵的元素进行赋值,将矩阵第二行、第三列的元素替换为0:

> X[2,3]=0

> X

     [,1] [,2] [,3]

[1,]    1    5    9

[2,]    2    6    0

[3,]    3    7   11

[4,]    4    8   12

R中有一个diag()函数可以返回矩阵的全部对角元素:

> X=matrix(1:9,ncol=3,nrow=3)

> X

     [,1]   [,2]   [,3]

[1,]    1    4    7

[2,]    2    5    8

[3,]    3    6    9

> diag(X)

[1] 1 5 9

当然也可以对对角元素进行重新赋值:

> diag(X)=c(0,0,1)

> X

     [,1] [,2] [,3]

[1,]    0    4    7

[2,]    2    0    8

[3,]    3    6    1

当操作对象不是对称矩阵时,diag()也可以进行操作。

> X=matrix(1:12,nrow=4,ncol=3)

> X

     [,1] [,2] [,3]

[1,]    1    5    9

[2,]    2    6   10

[3,]    3    7   11

[4,]    4    8   12

> diag(X)

[1]  1  6  11

diag()函数还能用来生成对角矩阵:

> diag(c(1,2,3))

     [,1] [,2] [,3]

[1,]    1    0    0

[2,]    0    2    0

[3,]    0    0    3

也可以生成单位对角矩阵:

> diag(3)

     [,1] [,2] [,3]

[1,]   1    0    0

[2,]    0    1    0

[3,]    0    0    1

> diag(4)

     [,1] [,2] [,3] [,4]

[1,]    1    0    0    0

[2,]    0    1    0    0

[3,]    0    0    1    0

[4,]    0    0    0    1

查看矩阵的上三角部分:在R中查看矩阵的上三角和下三角部分很简单。可以通过lower.tri()和upper.tir()来实现:

> args(lower.tri)

function (x, diag = FALSE)

NULL

> args(upper.tri)

function (x, diag = FALSE)

NULL

查看上三角:

> X=matrix(1:12,nrow=4,ncol=3)

> X

     [,1] [,2] [,3]

[1,]    1    5    9

[2,]    2    6   10

[3,]    3    7   11

[4,]    4    8   12

> X[lower.tri(X)]

[1]  2  3  4  7  8 12

改变赋值:

> X[lower.tri(X)]=0

> X

     [,1] [,2] [,3]

[1,]    1    5    9

[2,]    0    6   10

[3,]    0    0   11

[4,]    0    0    0

图片展示
 
相关评论
站长推荐