【问题标题】:Spearman's footrule distance with base R以 R 为底的 Spearman 脚尺距离
【发布时间】:2016-07-12 12:00:26
【问题描述】:

给定两个排列:

v1
[1] 4 3 1 5 2

v2
[1] 2 3 4 5 1

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

例如,对于这两个向量,如下:

1 已从 2 位置从 v1 移动到 v2
2 已从 4 位置从 v1 移动到 v2
3 已移动 @987645 @地点从v1v2
4被移动2地点从v1v2
5被移动0地点从v1到@987654

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

【问题讨论】:

  • 从您描述的方式来看,abs(match(v1, v2) - seq_along(v1)) 之类的内容可能会有所帮助。您能否添加更多(可能是边缘)案例进行测试?

标签: r vector permutation distance


【解决方案1】:

这是使用sapplywhichsum的方法:

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

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

我怀疑类似于@alexis_laz 在 cmets 中的解决方案可能具有更高的计算效率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2011-07-11
    • 2018-12-25
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多