1.矩阵生成
matrix()函数
as.matrix() 将对象强制转换为矩阵
is.matrix()判断对象是否为矩阵
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
nrow/nr为矩阵的行数,ncol/nc为矩阵的列数,默认值为1,
byrow,TRUE表示将数据按行放置,默认为FALSE,按列放置
dimnames,行和列的名称
> mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE,
dimnames = list(c("row1", "row2"),
c("C.1", "C.2", "C.3")))
> mdat
C.1 C.2 C.3
row1 1 2 3
row2 11 12 13
> matrix(1:10,2,5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
#生成空矩阵
> A<-matrix(nr=2,nc=5) #2行5列
> #赋值
> A[1,1]<-1
> A[1,5]<-5
> A[2,1]<-6
> A[2,5]<-10
> A
[,1] [,2] [,3] [,4] [,5]
[1,] 1 NA NA NA 5
[2,] 6 NA NA NA 10
#dim获取对象的维度
> dim(A)
[1] 2 5
#nrow 获取行数;ncol获取列数
> nrow(A)
[1] 2
> ncol(A)
[1] 5
2.矩阵运算
(1)矩阵的合并
rbind()按行合并(上下拼接),需要相同的列数
> A<-as.matrix(c(1:5))
> B<-as.matrix(c(100:104))
> A
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
> B
[,1]
[1,] 100
[2,] 101
[3,] 102
[4,] 103
[5,] 104
> rbind(A,B)
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
[6,] 100
[7,] 101
[8,] 102
[9,] 103
[10,] 104
cbind() 按列合并(左右拼接),需要相同的行数
> cbind(A,B)
[,1] [,2]
[1,] 1 100
[2,] 2 101
[3,] 3 102
[4,] 4 103
[5,] 5 104
(2)矩阵的拉直,as.vector(),将矩阵按列拉直
> dat<-cbind(A,B)
> as.vector(dat)
[1] 1 2 3 4 5 100 101 102 103 104
(3)矩阵行列的命名
dim()获得矩阵维度
dimnames()获得矩阵行列的名称
rownames() 获得矩阵行名,或命名行名
colnames()获得矩阵列名,或命名列名
> dat
[,1] [,2]
[1,] 1 100
[2,] 2 101
[3,] 3 102
[4,] 4 103
[5,] 5 104
> dim(dat)
[1] 5 2
> dimnames(dat) #此时无行名和列名
NULL
> rownames(dat)<-paste0("row.",1:5) ##命名行
> colnames(dat)<-paste0("col.",1:2) ##命名列
> dat
col.1 col.2
row.1 1 100
row.2 2 101
row.3 3 102
row.4 4 103
row.5 5 104
> rownames(dat)
[1] "row.1" "row.2" "row.3" "row.4" "row.5"
> colnames(dat)
[1] "col.1" "col.2"
> dimnames(dat)
[[1]]
[1] "row.1" "row.2" "row.3" "row.4" "row.5"
[[2]]
[1] "col.1" "col.2"
(4)矩阵下标
要访问矩阵某个元素或为该元素赋值的时候,只要写出矩阵名和方括号,中间有逗号分开两个下标
> dat
col.1 col.2
row.1 1 100
row.2 2 101
row.3 3 102
row.4 4 103
row.5 5 104
> dat[3,2] #第3行,第2列的值
[1] 102
> dat[3,2]<-500 #第3行,第2列的值改为500
> dat
col.1 col.2
row.1 1 100
row.2 2 101
row.3 3 500
row.4 4 103
row.5 5 104
> dat[1:3,1] ##第1:3行,第1列
row.1 row.2 row.3
1 2 3
若是想要去掉矩阵对应行和/或列,用负号即可
> dat2<-dat[-1,] ##去除矩阵的第一行
> dat2
col.1 col.2
row.2 2 101
row.3 3 500
row.4 4 103
row.5 5 104