以 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
的任意两个排列是灵活的)
比如这两个向量,如下:
1
从 v1
移动 2
位置到 v2
2
从 v1
移动 4
位置到 v2
3
从 v1
移动 0
位置到 v2
4
从 v1
移动 2
位置到 v2
5
从 v1
移动 0
位置到 v2
所以总距离为:2+4+0+2+0 = 8
这是使用 sapply
、which
和 sum
的方法:
sum(sapply(seq_along(v1), function(i) abs(i - (which(v2 == v1[i])))))
在这里,我们沿着v1的索引移动,计算当前索引中元素的索引与其在v2中的位置的距离。然后将这些加在一起。
我怀疑评论中@alexis_laz 的解决方案可能具有更高的计算效率。
给定两个排列:
v1
[1] 4 3 1 5 2
v2
[1] 2 3 4 5 1
你如何计算 Spearman 的脚尺距离(所有元素的总位移)与基数 R? (对于大小 n
的任意两个排列是灵活的)
比如这两个向量,如下:
1
从 v1
移动 2
位置到 v2
2
从 v1
移动 4
位置到 v2
3
从 v1
移动 0
位置到 v2
4
从 v1
移动 2
位置到 v2
5
从 v1
移动 0
位置到 v2
所以总距离为:2+4+0+2+0 = 8
这是使用 sapply
、which
和 sum
的方法:
sum(sapply(seq_along(v1), function(i) abs(i - (which(v2 == v1[i])))))
在这里,我们沿着v1的索引移动,计算当前索引中元素的索引与其在v2中的位置的距离。然后将这些加在一起。
我怀疑评论中@alexis_laz 的解决方案可能具有更高的计算效率。