在R語言中,矩陣()是將數(shù)據(jù)按行和列組織數(shù)據(jù)的一種數(shù)據(jù)對象,相當(dāng)于二維數(shù)組,可以用于描述二維的數(shù)據(jù)。與向量相似,矩陣的每個元素都擁有相同的數(shù)據(jù)類型。通常用列來表示來自不同變量的數(shù)據(jù)r語言怎么查看其自帶的數(shù)據(jù),用行來表示相同的數(shù)據(jù)。
1、R語言中矩陣的創(chuàng)建
在R語言中可以使用()函數(shù)來創(chuàng)建矩陣,其語法格式如下:
(data=NA, nrow = 1, ncol = 1, byrow = FALSE, = NULL)
參數(shù)含義如下:
data:矩陣的元素,默認(rèn)為NA,即未給出元素值的話,各項為NA
nrow:矩陣的行數(shù),默認(rèn)為1;
ncol:矩陣的列數(shù)r語言怎么查看其自帶的數(shù)據(jù),默認(rèn)為1;
byrow:元素是否按行填充,默認(rèn)按列;
:以字符型向量表示的行名及列名。
(1)創(chuàng)建形式1
m1
(2)創(chuàng)建形式2
m2
(3)創(chuàng)建形式3
m3
(4)創(chuàng)建形式4
m4
以上4中形式的執(zhí)行效果如下圖所示:
(5)創(chuàng)建形式5
使用rbind函數(shù)或cbind函數(shù)可以將兩個向量或矩陣合并為一個矩陣
v1
v2
m5
m6
m7
本部分的執(zhí)行效果見下圖
2、R語言中矩陣的索引
R語言中,矩陣的索引方式主要有以下幾種:
直接使用矩陣名可以獲得整個矩陣的情況,如下圖:
(1)矩陣名[行位置,列位置] 獲取某個元素的值
m1[2,1] #輸出矩陣m1第2行第1列的元素值:2
(2)矩陣名[行位置, ] 獲取某一行的所有元素
m1[2, ] #輸出矩陣m1中第2行的數(shù)據(jù)
(3)矩陣名[ , 列位置] 獲取某一列的所有元素
m1[ ,2] #輸出矩陣m1中第2列的所有元素
(4)矩陣名[ "行名","列名"] 通過行名和列名獲取某一個元素
m1["r1", "c2"]
(5)矩陣名["行名", ] 通過行名來獲取矩陣某一行的所有元素
m1["r2", ]
(6)矩陣名[ , "列名"] 通過列名來獲取矩陣某一列的所有元素
m1[ , "c1"]
(7)矩陣名[ -r, -c] 排除第r行和第c列數(shù)據(jù)
m1[-1, -2] #除去第1行及第2列的數(shù)據(jù)
以上部分的執(zhí)行結(jié)果見下圖:
(8)矩陣名[-r , ] 除去第r行之外的數(shù)據(jù)
m1[-2,] #除去第2行之外的數(shù)據(jù)
(9)矩陣名[ , -c] 除去第c列之外的數(shù)據(jù)
m1[, -2] #除去第2列之外的數(shù)據(jù)
以上兩種情況的執(zhí)行結(jié)果:
(10)矩陣名[向量1,向量2] 獲取向量1表示的行集和向量2表示的列集交叉處的數(shù)據(jù)
m1[c(1,2),c(1,3)]
(11)矩陣名[向量1, ]獲取向量1表示的行集的數(shù)據(jù)
m1[c(1,2), ]
(12)矩陣名[, 向量2] 獲取向量2表示的列集的數(shù)據(jù)
m1[ , c(1,3)]
以上三種情況的執(zhí)行結(jié)果:
(13)矩陣名[-向量1, -向量2] 獲取除指定行集和列集之外的元素
m1[-c(1),-c(2,3)]
(14)矩陣名[-向量1, ]獲取除指定行集之外的元素
m1[-c(2), ]
(15)矩陣名[ , -向量2] 獲取除指定列集之外的元素
m1[ , -c(1:2)]
(16)矩陣名[行名稱向量,列名稱向量] 獲取指定行名稱和列名稱的元素,或只指定行名稱向量,或列向量均可
m1[c("r1","r2"), c("c1","c3")]
m1[c("r1,"r2") , ]
m1[ , c("c1","c3")]
注意在以上使用矩陣的索引或向量表示的索引集時,索引不能超過矩陣的最大維數(shù)。
3、矩陣的編輯
(1)修改矩陣元素的值
在R語言中,主要通過以下幾種形式來修改矩陣中的元素值。
①修改單個值
m1[1,2] = 12 #將矩陣m1中第1行第2個元素的值修改為12
m1["r2","c2"] = 22 #將矩陣m1中行名稱為r2與列名稱c2交叉處的元素值修改為22
②修改某一行的數(shù)據(jù)
m1[2,] = c(21,22,23) #將矩陣第2行的數(shù)據(jù)修改為21,22,23
m1["r1" ,] = c(11:13) #將矩陣名稱為r1的行的數(shù)據(jù)修改為11 ,12, 13
m1[1, ] = 0 #將矩陣m1的第一行的數(shù)據(jù)都修改為0
③修改某一列的數(shù)據(jù)
m1[, 1] = c(11,21) #將矩陣的第一列數(shù)據(jù)修改為11,21
m1[, "c2"] = c(221,222) #將矩陣中名為c2的列數(shù)據(jù)改為221,222
m1[,3 ] = 333 #將矩陣第3列的數(shù)據(jù)都修改為333
注意下面這種情況:
ma
輸出
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
修改第2列的數(shù)據(jù):
ma[,2] = c(12,22) #這樣,向量的數(shù)據(jù)可以重復(fù)以補齊到與矩陣ma的行數(shù)相同
即第2列的數(shù)據(jù)變?yōu)?12 22 12 22
但是如果向量中提供的元素個數(shù)不能被替換對象的維數(shù)整除的話,會報錯,也就是說這里要替換的列元素有4個,提供了2個,2能被4整除,則其通過重復(fù)循環(huán)向量2次可以將矩陣列元素補齊,但如提供的向量元素有3個的話,會給出“被替換的項目不是替換值長度的倍數(shù)”的錯誤。即對于ma矩陣,其行或列給出替換的元素個數(shù)只能是1或2或4,其余會報錯。
(2)刪除指定的行或列
m1
m1
m2
注意,上面使用了給矩陣重新賦值的方式,否則不能實現(xiàn)刪除操作,僅是訪問。
(3)矩陣的合并
可以使用上面所說的rbind和cbind函數(shù)進(jìn)行合并
m1
m1
同樣,上面給出的向量元素不足時,循環(huán)使用,同樣當(dāng)元素個數(shù)不足時,其提供的元素個數(shù)應(yīng)能被對應(yīng)的行維或列維除盡,即列數(shù)或行數(shù)需是所提供的元素個數(shù)的整數(shù)倍。
4、矩陣的常用運算
(1)(m1) 求矩陣各列的和
(2)(m1) 求矩陣各行的和
(3)(m1)求矩陣各列的均值
(4)(m1)求矩陣個行的均值
(5)t(m1) 將矩陣轉(zhuǎn)置
(6)det(m1)求解方陣的行列式
(7)diag(m1) 取矩陣的對角元素
(8)solve(m1) 求矩陣的逆陣
(9)eigen(m1) 求矩陣的特征值和特征向量
(10)nrow(m1) 求矩陣的行數(shù)
(11)ncol(m1) 求矩陣的列數(shù)
(12)dim(m1) 求矩陣的行維與列維
(13)(A,B) 求兩個矩陣的內(nèi)積 AB = ATB 第一個矩陣的列數(shù)應(yīng)與第二個矩陣的行數(shù)相同
(14)A %*% B 與(13)相同
(完)