将矩阵中的每一行除以向量中的对应行

时间:2018-08-24 15:36:43

标签: r

假设我有以下矩阵:

mat <- read.table(text="
   0 25  7 25  9 20 26 26 22 19 22 25
  25  0 21 43 23 37 43 43 41 33 36 46
   7 21  0 21 22 20 22 37 35 32 35 45
  25 43 21  0 26 35 43 43 38 33 37 49
   9 23 22 26  0 21 24 23 24 19 22 31
  20 37 20 35 21  0 34 34 39 39 43 51
  26 43 22 43 24 34  0 44 36 33 37 48
  26 43 37 43 23 34 44  0 50 47 51 77
  22 41 35 38 24 39 36 50  0 47 50 78
  19 33 32 33 19 39 33 47 47  0 73 79
  22 36 35 37 22 43 37 51 50 73  0 87
  25 46 45 49 31 51 48 77 78 79 87  0           
", header=F)

mat <- as.matrix(mat)

我想计算一个特定的网络密度度量,其定义为: enter image description here

其中Z_ijk是团队成员i和j之间共现的次数,而max(Z_ijk)是团队成员i与团队k的任何其他成员共现的最大次数。 N_k是团队中的成员人数。

要获得每一行的最大值,我执行了以下操作:

max_values <- apply(mat, 1, max)

> max_values
 1  2  3  4  5  6  7  8  9 10 11 12 
26 46 45 49 31 51 48 77 78 79 87 87 

我认为我可以使用扫描将矩阵除以max_values:

sweep(mat, 1, max_values, FUN = '/')

但是不会产生预期的输出。有什么想法吗?

预期输出将是:将第1行中的每个值除以26,将第2行中的每个值除以46,依此类推。

1 个答案:

答案 0 :(得分:2)

我们可以通过除以rowMaxs(来自matrixStats)来做到这一点

library(matrixStats)
mat/rowMaxs(mat)