创建矩阵
(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版 薛薇 编著
网友评论