美文网首页
R的矩阵基本操作:创建与访问

R的矩阵基本操作:创建与访问

作者: MC学公卫 | 来源:发表于2019-03-13 14:57 被阅读0次

创建矩阵

(1)向量合并形成矩阵cbind()
  • cbind(向量名列表)
    行数=向量中的元素个数,列数=向量个数。需要注意的是各个向量的储存类型需要一致。
  • dim(矩阵名)
    查看矩阵行列数。
  • colnames(矩阵名) / rownames(矩阵名)
  • colnames(矩阵名[, 列位置1:列位置2]) / rownames(矩阵名[行位置1:行位置2, ])
    查看(指定列/行)矩阵列/行名,默认列名为列向量名。

也可以用行合并函数rbind()来创建。

下面展示一个例子。比如我们要录入一组学生的成绩信息,我们有他们的各项成绩与学号,下面要将它们整理为一个矩阵:

> student.ID = c(1,2,3,4)
> maths = c(78,99,89,80)
> Chinese = c(88,87,69,90)
> English = c(90,85,83,93)
> scores = cbind(student.ID,Chinese,maths,English) #创建矩阵
> scores
     student.ID Chinese maths English
[1,]          1      88    78      90
[2,]          2      87    99      85
[3,]          3      69    89      83
[4,]          4      90    80      93
# 注意这里的矩阵是没有行名的

> dim(scores) ## 查看行列数
[1] 4 4
> str(scores) ## 查看数据结构
 num [1:4, 1:4] 1 2 3 4 88 87 69 90 78 99 ...    #num表示为数值型,包括4行4列
 - attr(*, "dimnames")=List of 2 #
  ..$ : NULL                                     # 行名为NULL
  ..$ : chr [1:4] "student.ID" "Chinese" "maths" "English" # 列名为这些
## 下面给矩阵的行命名
> rownames(scores) = c("Jack","May","Rose","Tom")
> scores
     student.ID Chinese maths English
Jack          1      88    78      90
May           2      87    99      85
Rose          3      69    89      83
Tom           4      90    80      93

当向量包含的元素不同的时候会发生什么呢?

> a = 1:9
> b = 1:6
> cbind(a,b)
      a b
 [1,] 1 1
 [2,] 2 2
 [3,] 3 3
 [4,] 4 4
 [5,] 5 5
 [6,] 6 6
 [7,] 7 1
 [8,] 8 2
 [9,] 9 3
Warning message:
In cbind(a, b) :
  number of rows of result is not a multiple of vector length (arg 2)

会有警告信息,但得出的矩阵行数以多的为主,b中的元素后面依次重复补齐。

通过行合并函数创建矩阵:

rbind(a,b)
  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
a    1    2    3    4    5    6    7    8    9
b    1    2    3    4    5    6    1    2    3

(2)单个向量派生矩阵matrix()

matrix(向量名, nrow = 行数, ncol = 列数, byrow = TRUE/FALSE, dimnames = list(行名向量,列名向量))

向量名可以省略;
byrow是指向量元素在矩阵中的排列顺序,TRUE是按行排列,FALSE是按列排列;
dimnames用于指定行名和列名。

> a = 1:30
> dim1 = c("r1","r2","r3","r4","r5")
> dim2 = c("c1","c2","c3","c4","c5","c6")
> matrix(a,byrow = T, nrow = 5, ncol = 6, dimnames = list(dim1,dim2))
   c1 c2 c3 c4 c5 c6
r1  1  2  3  4  5  6
r2  7  8  9 10 11 12
r3 13 14 15 16 17 18
r4 19 20 21 22 23 24
r5 25 26 27 28 29 30

访问矩阵中的元素

(1)访问指定列/行/位置上的元素

与向量的访问类似,直接看例子:

> scores
     student.ID Chinese maths English
Jack          1      88    78      90
May           2      87    99      85
Rose          3      69    89      83
Tom           4      90    80      93
> scores[1,] 
student.ID    Chinese      maths    English 
         1         88         78         90 
> scores[,1]
Jack  May Rose  Tom 
   1    2    3    4 
> scores[2,3]
[1] 99
> scores[1:2,2:3]
     Chinese maths
Jack      88    78
May       87    99

这里只需要记牢,先行后列。
这里还能修改指定元素:
比如要将Jack同学的数学成绩改为88,那么:

> scores[1,3] = 88
> scores
     student.ID Chinese maths English
Jack          1      88    88      90
May           2      87    99      85
Rose          3      69    89      83
Tom           4      90    80      93
(2)访问前几行或后几行的元素:head()和tail()

默认是前/后5行,用参数n来指定行数。
head(对象, n) :用于访问前n行的元素
tail(对象, n) :用于访问后n行的元素


本文参考:《R语言数据挖掘》第2版 薛薇 编著

相关文章

网友评论

      本文标题:R的矩阵基本操作:创建与访问

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