如何根据不同的列子集矩阵行值?


假设我们有一个名为 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 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告