如何根據不同的列子集矩陣行值?


假設我們有一個名為 M 的矩陣,它包含三列,我們希望對 M 的行值進行子集選擇,但來自不同的列,這意味著子集不會只包含來自單列的值。

因此,在建立子集之前,我們首先需要找到可用於建立子集的列號,如果列號未知,可以使用 sample 函式來完成。之後,我們可以使用帶有單個方括號的 cbind 函式進行子集選擇。

檢視以下示例以瞭解如何操作。

示例 1

以下程式碼片段建立一個示例矩陣:

M1<-matrix(rpois(80,10),ncol=4)
M1

建立以下矩陣:

   [,1] [,2] [,3] [,4]
 [1,] 7  11   17   14
 [3,] 6   5   10    9
 [4,] 8   9   14   10
 [5,] 10 14    9    6
 [6,] 13  6    6    6
 [7,] 10 15   10   10
 [8,] 9  10   10    9
 [9,] 13  9   14   10
[10,] 9   4    6   14
[11,] 12 11   11    6
[12,] 8  15    8    8
[13,] 7  13   11    9
[14,] 16  9    9   12
[15,] 10  9   11   13
[16,] 10 10    6    5
[17,] 11  7   15   13
[18,] 9   6   13    4
[19,] 18  4   14   11
[20,] 17 11    9    7

要在 R 中根據不同的列子集矩陣行值,在上面建立的矩陣上新增以下程式碼到上述程式碼片段:

M1<-matrix(rpois(80,10),ncol=4)
Columns<-sample(1:4,20,replace=TRUE)
Columns

輸出

如果您將上述所有程式碼片段作為一個程式執行,則會生成以下輸出:

[1] 2 4 2 1 4 3 2 4 1 4 3 4 4 2 1 4 3 4 1 1

要在 R 中根據不同的列子集矩陣行值,在上面建立的矩陣上新增以下程式碼到上述程式碼片段:

M1<-matrix(rpois(80,10),ncol=4)
Columns<-sample(1:4,20,replace=TRUE)
M1[cbind(1:nrow(M1),Columns)]

輸出

如果您將上述所有程式碼片段作為一個程式執行,則會生成以下輸出:

[1] 12 14 5 8 6 6 15 9 13 14 11 8 9 9 10 5 15 4 18 17

示例 2

以下程式碼片段建立一個示例矩陣:

M2<-matrix(rnorm(40),ncol=2)
M2

建立以下矩陣:

           [,1]       [,2]
 [1,]  0.0526401 -1.33823138
 [2,] -0.9658880 -0.19916662
 [3,] -0.1729805  0.38128801
 [4,]  1.0575809 -1.74814941
 [5,]  0.9132299  2.22706167
 [6,] -1.0254388  0.72220810
 [7,] -0.4295359  0.23052190
 [8,] -0.5603532 -1.71916189
 [9,] -1.0226156 -0.62879763
[10,]  0.4251926  0.51384615
[11,]  0.9658157  0.11204097
[12,] -1.1791793  0.90926504
[13,] -1.0283043  0.32224749
[14,] -1.0399879 -0.75888477
[15,]  0.2083132 -0.88142437
[16,]  1.1399261 -0.43637839
[17,]  0.3146594  0.84852872
[18,] 0.9208013   0.09130219
[19,] -0.7754234 -0.17243346
[20,] -1.8399159  0.35939999

要在 R 中根據不同的列子集矩陣行值,在上面建立的矩陣上新增以下程式碼到上述程式碼片段:

M2<-matrix(rnorm(40),ncol=2)
Columns<-sample(1:2,20,replace=TRUE)
Columns

輸出

如果您將上述所有程式碼片段作為一個程式執行,則會生成以下輸出:

[1] 1 2 1 1 1 2 2 2 2 1 2 2 1 1 2 2 1 2 1 2

要在 R 中根據不同的列子集矩陣行值,在上面建立的矩陣上新增以下程式碼到上述程式碼片段:

M2<-matrix(rnorm(40),ncol=2)
Columns<-sample(1:2,20,replace=TRUE)
M2[cbind(1:nrow(M2),Columns)]

輸出

如果您將上述所有程式碼片段作為一個程式執行,則會生成以下輸出:

 [1]  0.05264010 -0.19916662 -0.17298052  1.05758086 0.91322994 0.72220810
 [7]  0.23052190 -1.71916189 -0.62879763  0.42519260 0.11204097 0.90926504
[13] -1.02830426 -1.03998789 -0.88142437 -0.43637839 0.31465938 0.09130219
[19] -0.77542338  0.35939999

示例 3

以下程式碼片段建立一個示例矩陣:

M3<-matrix(round(runif(60,1,5),2),ncol=3)
M3

建立以下矩陣:

       [,1] [,2] [,3]
  [1,] 3.82 2.32 3.00
 [2,] 4.07 4.21 2.42
 [3,] 1.98 4.75 4.18
 [4,] 2.34 3.73 3.60
 [5,] 2.63 2.69 4.82
 [6,] 2.62 3.76 1.57
 [7,] 4.28 2.62 4.12
 [8,] 2.86 4.98 4.76
 [9,] 2.36 1.61 2.00
[10,] 3.22 1.17 2.97
[11,] 2.04 2.41 3.90
[12,] 1.76 2.29 2.14
[13,] 3.05 1.07 2.43
[14,] 4.98 1.72 1.42
[15,] 3.57 2.90 4.89
[16,] 1.00 4.98 4.58
[17,] 2.09 1.49 1.88
[18,] 2.49 1.67 3.49
[19,] 2.59 1.55 1.21
[20,] 4.43 3.39 2.81

要在 R 中根據不同的列子集矩陣行值,在上面建立的矩陣上新增以下程式碼到上述程式碼片段:

M3<-matrix(round(runif(60,1,5),2),ncol=3)
Columns<-sample(1:3,20,replace=TRUE)
Columns

輸出

如果您將上述所有程式碼片段作為一個程式執行,則會生成以下輸出:

[1] 2 2 3 3 3 2 2 2 3 1 1 1 2 2 1 3 1 2 2 3

要在 R 中根據不同的列子集矩陣行值,在上面建立的矩陣上新增以下程式碼到上述程式碼片段:

M3<-matrix(round(runif(60,1,5),2),ncol=3)
Columns<-sample(1:3,20,replace=TRUE)
M3[cbind(1:nrow(M3),Columns)]

輸出

如果您將上述所有程式碼片段作為一個程式執行,則會生成以下輸出:

 [1] 2.32 4.21 4.18 3.60 4.82 3.76 2.62 4.98 2.00 3.22 2.04 1.76 1.07 1.72 3.57
[16] 4.58 2.09 1.67 1.55 2.81

更新於:2021年11月10日

88 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.