如何在 R 中将矩阵的列除以向量的元素?


假设我们有一个向量 V,它包含五个元素,以及一个矩阵 M,它有五列。现在假设我们想要将 M 中的每一列除以向量 V 中相应的元素,这意味着 M 中的第一列将除以 V 中的第一个值,以此类推,那么我们可以使用 sweep 函数,如下所示:

sweep(M,2,V,FUN="/")

示例 1

考虑以下矩阵和向量:

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

创建了以下数据框

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

为了将 M1 的列除以上面创建的数据框中 V1 中相应的元素,请将以下代码添加到上面代码段中:

M1<-matrix(rpois(80,10),ncol=4)
V1<-1:4
sweep(M1,2,V1,FUN="/")

输出

如果您将以上所有代码段作为单个程序执行,则会生成以下输出:

     [,1]  [,2]      [,3]  [,4]
[1,]   9   7.5  3.333333  3.00
[2,]   9   5.5  3.333333  2.50
[3,]   9   5.5  3.666667  1.00
[4,]  10   6.5  3.666667  2.50
[5,]   9   6.0  2.333333  1.75
[6,]   8   4.5  3.000000  4.00
[7,]   7   4.5  4.000000  2.00
[8,]  12   3.5  4.333333  2.75
[9,]  16   4.0  3.333333  1.50
[10,] 12   5.0  2.333333  2.25
[11,] 14   4.5  4.000000  2.50
[12,] 10   4.0  1.666667  2.75
[13,]  8   6.5  2.666667  2.50
[14,]  8   2.5  2.333333  2.00
[15,] 10   7.0  2.666667  3.25
[16,]  7   5.0  3.000000  1.75
[17,] 11   4.5  3.333333  3.00
[18,] 15   5.5  5.666667  2.00
[19,]  6   8.0  4.666667  3.50
[20,] 12   3.0  4.333333  2.00

示例 2

考虑以下矩阵:

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

创建了以下数据框

        [,1] [,2]
[1,]   0.91 -0.03
[2,]  -0.49 -0.23
[3,]  -0.26  0.10
[4,]  -0.05 -1.16
[5,]   0.86 -2.16
[6,]   0.58 -0.62
[7,]   0.86 -0.67
[8,]   0.32 -0.54
[9,]   0.90 -0.05
[10,]  0.72 -0.88
[11,] -0.46 -1.61
[12,]  0.02 -0.39
[13,]  1.09 -0.09
[14,] -0.67  0.64
[15,] -1.85 -1.31
[16,] -3.32 -1.12
[17,]  1.39  0.08
[18,] -1.25 -0.55
[19,]  0.50  0.93
[20,]  1.02 -1.29

为了将 M2 的列除以上面创建的数据框中 V2 中相应的元素,请将以下代码添加到上面代码段中:

M2<-matrix(round(rnorm(40),2),ncol=2)
V2<-c(0.5,0.10)
sweep(M2,2,V2,FUN="/")

输出

如果您将以上所有代码段作为单个程序执行,则会生成以下输出:

        [,1]    [,2]
[1,]   1.82    -0.3
[2,]  -0.98    -2.3
[3,]  -0.52     1.0
[4,]  -0.10   -11.6
[5,]   1.72   -21.6
[6,]   1.16    -6.2
[7,]   1.72    -6.7
[8,]   0.64    -5.4
[9,]   1.80    -0.5
[10,]  1.44    -8.8
[11,] -0.92   -16.1
[12,]  0.04    -3.9
[13,]  2.18    -0.9
[14,] -1.34     6.4
[15,] -3.70   -13.1
[16,] -6.64   -11.2
[17,]  2.78     0.8
[18,] -2.50    -5.5
[19,]  1.00     9.3
[20,]  2.04   -12.9

更新于: 2021-10-28

2K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告