2014-10-03 53 views
2

Hi there!R - 比较计算的相关性

我有一张有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 

中当然,整个对角线上的数字的绝对值将是相等的,因此仅计算一半的分数是很困难的。

问题

有没有简单的方法做这样的操作,preferebly一个量化的行动,或者我有for循环建立的呢?

// HK

回答

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 

(只显示第一列和行。)

+0

有一种简单的方法来保持山坳/行名称。所有的名字都是分数表的行名? – user4098307 2014-10-03 13:39:59

+0

当然,但很难从你的问题中知道你的数据的形式。你可以编辑它并添加'dput()'的输出吗? – Backlin 2014-10-03 14:47:58

+0

对不起,我现在不是纽约个人电脑。但数据是矢量格式,row.names是玩家的名字。如果你需要输出,我会稍后发布。唯一列的名称是'total'.. – user4098307 2014-10-03 15:50:42