假设我有以下矩阵:
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)
其中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,依此类推。
答案 0 :(得分:2)
我们可以通过除以rowMaxs
(来自matrixStats
)来做到这一点
library(matrixStats)
mat/rowMaxs(mat)