你好!
我有一张24个名字及其得分的表格。对我而言,将两个人的得分相提并论是相关的。因此,与其他所有球员相比,我需要计算每个球员的得分差异。这应该导致24x24矩阵,其中对角线两侧的分数相等
我有什么
name1 score1
name2 score2
name3 score3
..... .....
name24 score24
我在寻找什么
name1 name2 name 3 ... name 24
name1 0 score2-score1 score3-score1 ... score24-score1
name2 score1-score2 0 score3-score2 ... score24-score2
name3 score1-score3 score2-score3 0 ... score24-score3
... ... ... ... ... ...
name24 score1-score24 score2-score24 score3-score24 ... 0
当然,对角线上的数字的绝对值将是相等的,因此只计算得分的一半是非常好的。
问题
有没有简单的方法来进行这种操作,最好是矢量化操作,还是我必须使用for循环来构建它?
// HK
答案 0 :(得分:3)
outer
函数可能就是你要找的东西
score <- sample(24)
names(score) <- sprintf("Player%02i", 1:24)
outer(score, score, "-")
Player01 Player02 Player03 Player04 Player05 Player06 Player07
Player01 0 19 4 18 10 17 21
Player02 -19 0 -15 -1 -9 -2 2
Player03 -4 15 0 14 6 13 17
Player04 -18 1 -14 0 -8 -1 3
Player05 -10 9 -6 8 0 7 11
Player06 -17 2 -13 1 -7 0 4
Player07 -21 -2 -17 -3 -11 -4 0
(只显示第一列和第一行。)