R的数据结构--矩阵

矩阵:存放相同类型元素的二维向量

参数解释

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

参数含义如下:

  • data: 矩阵的元素的向量,默认为NA
  • nrow:矩阵的行数,默认为1
  • ncol: 矩阵的列数,默认为1
  • byrow:元素是否按行填充,默认按列
    •   byrow = FALSE:按列填充
    •   byrow = TRUE:按行填充
  • dimnames:以字符型向量表示的行名及列名

创建形式

m1 <- matrix(
  c(1:6),
  nrow=2,
  ncol=3,
  dimnames=list(
    c("r1","r2"),
    c("c1","c2","c3")
  )
)
"""
    c1 c2 c3
r1  1  3  5
r2  2  4  6
"""

# 共6个元素,分2行,每行3个元素,未指定行名和列名
m2 <- matrix(1:6,nrow=2)   <-->  m3 <- matrix(1:6,ncol=3)
"""
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
"""

#未指定元素数据,默认为NA,2行3列,nr是nrow的简写,nc是ncol的简写
m4 <- matrix(nr=2,nc=3)
""" 
        [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA
"""

# 创建名为v1的向量
v1 <- c(1:4) 
# 创建名为v2的向量
v2 <- c(5:8) 
# 将向量v1和v2按行合并为一个矩阵
m5 <- rbind(v1,v2) 
"""
   [,1] [,2] [,3] [,4]
v1    1    2    3    4
v2    5    6    7    8
"""
# 将向量v1和v2按列合并为一个矩阵
m6 <- cbind(v1,v2) 
"""
     v1 v2
[1,]  1  5
[2,]  2  6
[3,]  3  7
[4,]  4  8
"""
# 将上面定义的矩阵m1和m2合并为一个新的矩阵
m7 <- rbind(m1,m2) 
"""
   c1 c2 c3
r1  1  3  5
r2  2  4  6
     1  3  5
     2  4  6
"""

获取指定的值

使用位置索引来访问元素

  • 矩阵名[行位置,列位置]  -->  获取某个元素的值
  • 矩阵名[行位置, ]  -->  获取某一行的所有元素
  • 矩阵名[, 列位置]  -->  获取某一列的所有元素

使用向量访问若干行或若干列

m1
"""
   c1 c2 c3
r1  1  3  5
r2  2  4  6
"""
  • 矩阵名[向量1,向量2]  -->  获取向量1表示的行集和向量2表示的列集交叉处的数据
m1[c(1,2),c(1,3)]
"""
   c1 c3
r1  1  5
r2  2  6
"""
  • 矩阵名[向量1, ]  -->  获取向量1表示的行集的数据
m1[c(1,2), ]
"""
   c1 c2 c3
r1  1  3  5
r2  2  4  6
"""
  • 矩阵名[, 向量2]  -->  获取向量2表示的列集的数据
m1[ , c(1,3)]
"""
   c1 c3
r1  1  5
r2  2  6
"""

使用行名或列名来访问矩阵中的元素

# m1矩阵行名分别为r1和r2, 列名分别为c1,c2,c3
m1 <- matrix(
  c(1:6),
  nrow=2,
  ncol=3,
  dimnames=list(
    c("r1","r2"),
    c("c1","c2","c3")
  )
)
"""
   c1 c2 c3
r1  1  3  5
r2  2  4  6
"""
  • 矩阵名[ "行名","列名"]  -->  通过行名和列名获取某一个元素
m1["r1", "c2"]  # 3
  • 矩阵名["行名", ]  -->  通过行名来获取矩阵某一行的所有元素
m1["r2", ]
"""
c1 c2 c3 
 2  4  6 
"""
  • 矩阵名[ , "列名"]  -->  通过列名来获取矩阵某一列的所有元素
m1[ , "c1"]
"""
r1 r2 
 1  2
"""

排除指定的元素(行或列)

  • 矩阵名[ -r, -c]  -->  排除第r行和第c列数据,返回剩下数据
# 除去第1行及第2列的数据
m1[-1, -2] 
"""
c1 c3 
 2  6 
"""
  • 矩阵名[-r , ]  -->  除去第r行之外的数据
# 除去第2行之外的数据
m1[-2,] 
"""
c1 c2 c3 
 1  3  5 
"""
  • 矩阵名[ , -c]  -->  除去第c列之外的数据
# 除去第2列之外的数据
m1[, -2] 
  • 矩阵名[-向量1, -向量2]  -->  获取除指定行集和列集之外的元素
m1[-c(1),-c(2,3)]  # 2
  • 矩阵名[-向量1, ]  -->  获取除指定行集之外的元素
m1[-c(2), ]
  • 矩阵名[ , -向量2]  -->  获取除指定列集之外的元素
m1[ , -c(1:2)]

 

posted @ 2019-12-04 11:29  一心取信  阅读(816)  评论(0编辑  收藏  举报