===================
= 个人练习R语言的笔记 =
= 跟我一起来 Coding⑧! =
===================
0007-矩阵-矩阵中元素的访问
矩阵概念
- 在R语言中,矩阵Matrix是将数据按行和列组织的一种数据对象,相当于二维数组,可以用于描述二维的数据
- 与向量相似,矩阵的每个元素都拥有相同的数据类型。通常用列来表示来自不同变量的数据,用行来表示相同特性的数据
R语言中矩阵的创建
创建形式1:指定行数
m <- matrix(1:20, nrow = 4)
m
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
a <- matrix(1:20, nrow = 6)
# 注意!这里进行了循环补齐 # 且抛出一个warning!
a
## Warning in matrix(1:20, nrow = 6): 数据长度[20]不是矩阵行数[6]的整倍
## [,1] [,2] [,3] [,4]
## [1,] 1 7 13 19
## [2,] 2 8 14 20
## [3,] 3 9 15 1
## [4,] 4 10 16 2
## [5,] 5 11 17 3
## [6,] 6 12 18 4
创建形式2:指定列数
m <- matrix(1:20, ncol = 4)
m
## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 2 7 12 17
## [3,] 3 8 13 18
## [4,] 4 9 14 19
## [5,] 5 10 15 20
m <- matrix(1:20, ncol = 6)
## Warning in matrix(1:20, ncol = 6): 数据长度[20]不是矩阵列数[6]的整倍数
m
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 5 9 13 17 1
## [2,] 2 6 10 14 18 2
## [3,] 3 7 11 15 19 3
## [4,] 4 8 12 16 20 4
创建形式3:赋值同时给行和列命名
m <- matrix(c(1:20),
nrow = 4,
ncol = 5,
dimnames = list(c('r1','r2','r3','r4'),
c('c1','c2','c3','c4','c5')))
m
## c1 c2 c3 c4 c5
## r1 1 5 9 13 17
## r2 2 6 10 14 18
## r3 3 7 11 15 19
## r4 4 8 12 16 20
创建形式4:仅指定大小,不赋值
m <- matrix(nrow = 2, ncol = 3)
m
## [,1] [,2] [,3]
## [1,] NA NA NA
## [2,] NA NA NA
创建形式5:使用rbind或者cbind组合构建 - rbind:将两个向量/矩阵按照行合并为一个矩阵 - cbind:将两个向量/矩阵按照列合并为一个矩阵
a <- c(1:4)
b <- c(4:7)
m <- rbind(a,b)
m
## [,1] [,2] [,3] [,4]
## a 1 2 3 4
## b 4 5 6 7
a <- c(1:4)
b <- c(4:7)
m <- cbind(a,b)
m
## a b
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
## [4,] 4 7
m1 <- matrix(1:8, nrow = 2)
m2 <- matrix(2:9, nrow = 2)
m1
## [,1] [,2] [,3] [,4]
## [1,] 1 3 5 7
## [2,] 2 4 6 8
m2
## [,1] [,2] [,3] [,4]
## [1,] 2 4 6 8
## [2,] 3 5 7 9
m <- rbind(m1,m2)
m
## [,1] [,2] [,3] [,4]
## [1,] 1 3 5 7
## [2,] 2 4 6 8
## [3,] 2 4 6 8
## [4,] 3 5 7 9
m <- cbind(m1,m2)
m
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 3 5 7 2 4 6 8
## [2,] 2 4 6 8 3 5 7 9
1. 通过位置引用
m
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 3 5 7 2 4 6 8
## [2,] 2 4 6 8 3 5 7 9
m[2,3]
## [1] 6
m[2,]
## [1] 2 4 6 8 3 5 7 9
m[,8]
## [1] 8 9
m[3] # 第三个元素
## [1] 3
2. 通过名称引用
m <- matrix(c(1:20),
nrow = 4,
ncol = 5,
dimnames = list(c('r1','r2','r3','r4'),
c('c1','c2','c3','c4','c5')))
m
## c1 c2 c3 c4 c5
## r1 1 5 9 13 17
## r2 2 6 10 14 18
## r3 3 7 11 15 19
## r4 4 8 12 16 20
m['r1','c5']
## [1] 17
m['r2',]
## c1 c2 c3 c4 c5
## 2 6 10 14 18
m[,'c2']
## r1 r2 r3 r4
## 5 6 7 8
3. 通过删除方式访问
# 排除第1行和第3列
m[-1,-3]
## c1 c2 c4 c5
## r2 2 6 14 18
## r3 3 7 15 19
## r4 4 8 16 20
m[-1,]
## c1 c2 c3 c4 c5
## r2 2 6 10 14 18
## r3 3 7 11 15 19
## r4 4 8 12 16 20
m[,-2]
## c1 c3 c4 c5
## r1 1 9 13 17
## r2 2 10 14 18
## r3 3 11 15 19
## r4 4 12 16 20
4. 通过向量引用
m[c(1,2),c(4,5)]
## c4 c5
## r1 13 17
## r2 14 18
m[c(1:3),c(2:4)]
## c2 c3 c4
## r1 5 9 13
## r2 6 10 14
## r3 7 11 15
m[c(3,4),]
## c1 c2 c3 c4 c5
## r3 3 7 11 15 19
## r4 4 8 12 16 20
m[,c(2:5)]
## c2 c3 c4 c5
## r1 5 9 13 17
## r2 6 10 14 18
## r3 7 11 15 19
## r4 8 12 16 20
m[,c(2,5,4)]
## c2 c5 c4
## r1 5 17 13
## r2 6 18 14
## r3 7 19 15
## r4 8 20 16
m[-c(2,3),]
## c1 c2 c3 c4 c5
## r1 1 5 9 13 17
## r4 4 8 12 16 20
m['r3',c('c2','c1')]
## c2 c1
## 7 3