基于另一矩阵中最相似行的索引对矩阵中的行进行排序

时间:2012-01-23 13:02:22

标签: r matrix comparison

我试图“解开”包含某些聚类的质心的矩阵的行,这些聚类的质心与将样本分配给聚类的顺序不同。最初,我比较了均值数据点和聚类中心之间距离的绝对值,并分配了距离最小的行的索引。当然,我不允许有重复的索引。它工作得很好但是对称值引起了一个问题(即,由于距离的绝对值,镜像簇没有正确排序)。此外,我试图根据差异对它们进行排序,但没有按预期工作。我一直在查看order()和sort()函数,并找到了一个不起作用的例子。

order(mean)        
order(mean)[centers]       
sort(order(mean)[centers]) 
mean[sort(order(mean)[centers])]

我也试过了

apply(mean==centers,1,all)

但当然在任何地方都会返回FALSE。

矩阵样本:

means <- c(0.055190097, 0.032412395,    0.015372307,    -0.008012372,
-0.018736792,   -0.078138715, -0.058707713,   -0.044020629,
-0.023750329,   -0.014402083, -0.069920581,   -0.064429216,
-0.059913345,   -0.052302253,   -0.047874074,  0.050557395,
0.047246979,    0.044577065,    0.040384336,    0.038140009,
0.114954601,    0.108110051,    0.102531680,    0.093341425,    0.088140310)
dim(means) <- c(5,5)
means <- t(means)


centers <- c(-0.038754, -0.021588,-0.008851,    0.008579,   0.016579,
 0.018371,   0.006095,   -0.003026,  -0.015537, -0.021286,
-0.078143,  -0.069267,  -0.062197,   -0.051295,  -0.045521,
 0.033145,   0.033348,   0.033354,   0.032947,   0.032511,
 0.115464,   0.105248,   0.097172,   0.084732,   0.078162)
dim(centers) <- c(5,5)
centers <- t(centers)

例如(使用上面的例子),表示矩阵中的第2行对应于 center 矩阵中的第3行,因为它距离最近(数据点)明智的)。所以,我必须找到意味着中的哪一行与中心中的哪一行相对应(没有重复)。 我的矩阵更大,但这应该足够了 你有什么建议吗? 谢谢

1 个答案:

答案 0 :(得分:-1)

好吧,我没有找到任何内置函数来完成这项工作,所以我只是实现了一个递归算法来处理工作..即使它不是R编程的方式,至少它解决了问题。在这个特殊情况下,我可能会补充一个非常讨厌的问题,但现在它正在发挥作用。感谢所有对这个问题表现出兴趣的人。