gpt4 book ai didi

r - 确保相邻点之间的最小距离

转载 作者:行者123 更新时间:2023-12-05 00:38:51 25 4
gpt4 key购买 nike

我有一个包含 15-25 个数据点的列表/框架。它们都在 0 到 100 之间,并且有一些集群(例如大约 72)。显示此数据时,我想增加每对点之间的距离,使其至少为 2(例如 69.4 和 71.4 将是两个相邻的点)。

但是,我需要确保保持整体顺序并使每个点尽可能接近原始位置。

我的积分 list 很简单

scores <- c(13.343, 17.998, 25.413, 27.721, 33.361, 47.263, 52.298, 55.981,
57.851, 72.038, 72.204, 72.296, 73.472, 75.925, 80.748, 85.998)

我想增加点簇之间的距离。 72.038 - 72.296 的点位都将向下移动以确保更均匀的价差。
spacedScores <- c(13.343, 17.998, 25.413, 27.721, 33.361, 47.263, 52.298,
55.981, 57.851, 67.925, 69.925, 71.925, 73.925, 75.925,
80.748, 85.998)

关于如何在 R 中最干净地做到这一点的任何建议?

澄清:我不一定要寻找数学上的最佳解决方案,只是一些非常好的解决方案。大多数时候我也想象一些点需要向上移动,一些点需要向下移动 - 这很好。

最佳答案

您可以使用 diff(scores)找到点之间的距离(我假设值已排序)。

然后使用 which(diff(scores) < 2)识别“坏点”并将它们移回使间距= 2。

问题是,移动一个点以校正一个距离可能会使前一个或下一个距离变为 < 2,因此您必须多次重复此操作。

这是我“蛮力”解决方案的示例。你可能想引入一个计数器来避免无限循环

scores <- c(13.343, 17.998, 25.413, 27.721, 33.361, 47.263,
52.298, 55.981, 57.851, 72.038, 72.204, 72.296, 73.472,
75.925, 80.748, 85.998)
spacedScores <- c(13.343, 17.998, 25.413, 27.721, 33.361,
47.263, 52.298, 55.981, 57.851, 67.925, 69.925, 71.925,
73.925, 75.925, 80.748, 85.998)

plot(scores, pch=20)
points(spacedScores, pch='x', col="red")

badPoints <- which(diff(scores) < 2)

while (length(badPoints) > 0)
{
scores[badPoints] <- scores[badPoints] - (2 - diff(scores)[badPoints])
badPoints <- which(diff(scores) < 2)
}

points(scores, pch='o', col="green")

结果如下:黑色为原始点,绿色为修改后的点,红色为您提供的间隔点

example plot

关于r - 确保相邻点之间的最小距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com