以 R 为底的斯皮尔曼尺距

Spearman's footrule distance with base R

给定两个排列:

v1
[1] 4 3 1 5 2

v2
[1] 2 3 4 5 1

你如何计算 Spearman 的脚尺距离(所有元素的总位移)与基数 R? (对于大小 n 的任意两个排列是灵活的)

比如这两个向量,如下:

1v1 移动 2 位置到 v2
2v1 移动 4 位置到 v2
3v1 移动 0 位置到 v2
4v1 移动 2 位置到 v2
5v1 移动 0 位置到 v2

所以总距离为:2+4+0+2+0 = 8

这是使用 sapplywhichsum 的方法:

sum(sapply(seq_along(v1), function(i) abs(i - (which(v2 == v1[i])))))

在这里,我们沿着v1的索引移动,计算当前索引中元素的索引与其在v2中的位置的距离。然后将这些加在一起。

我怀疑评论中@alexis_laz 的解决方案可能具有更高的计算效率。