R 在同一数据帧中查找下一个最近点

R 在同一数据帧中查找下一个最近点,r,coordinates,spatial,R,Coordinates,Spatial,我使用的是R-Studio,我有一个数据框,其中有x,y的点。当我选择x0,y0时,我想找到下一个最近的点。当我有x1,y1时,我想用它们作为x0,y0,找到下一个最近的点,也就是x2,y2 这个问题的答案有助于: 但是现在我需要第二部分的帮助来更新x0,y0。直到它通过我所有的数据。这里有一个解决方案,把你的问题当作旅行推销员的问题来处理 样本数据 mydata <- data.frame( id = letters[1:4], x = c(1

我使用的是R-Studio,我有一个数据框,其中有x,y的点。当我选择x0,y0时,我想找到下一个最近的点。当我有x1,y1时,我想用它们作为x0,y0,找到下一个最近的点,也就是x2,y2

这个问题的答案有助于:
但是现在我需要第二部分的帮助来更新x0,y0。直到它通过我所有的数据。

这里有一个解决方案,把你的问题当作旅行推销员的问题来处理

样本数据

mydata <- data.frame( id = letters[1:4],
                      x = c(1,10,2,5),
                      y = c(1,10,4,6) )

#what does it look like?
library(ggplot2)
ggplot( mydata, aes( x = x, y = y, label = id)) + geom_point() + geom_text( vjust = -1 )

mydata这里有一个解决方案,将您的问题作为旅行推销员的问题来处理

样本数据

mydata <- data.frame( id = letters[1:4],
                      x = c(1,10,2,5),
                      y = c(1,10,4,6) )

#what does it look like?
library(ggplot2)
ggplot( mydata, aes( x = x, y = y, label = id)) + geom_point() + geom_text( vjust = -1 )

mydata这里是一个示例,它获取一个坐标列表,然后计算每对点之间的欧几里德距离,然后创建一条通过长度
步长
的点的路径,同时从不访问同一点两次

库(tidyverse)
种子集(1234)
距离表%
(函数(X)展开网格(X,X%>%setNames(c(“id_2”,“x2”,“y2”)))))%>%
过滤器(id!=id_2)%>%
突变(euc_dist=sqrt((x-x2)^2+(y-y2)^2))
步数=25
起始id=样本(1:100,1)
结果\u holder=tible(顺序=1:steps,位置\u id=numeric(steps),x=numeric(steps),y=numeric(steps))

结果\u holder$location\u id[1]这里是一个示例,它获取一个坐标列表,然后计算每对点之间的欧几里德距离,然后创建一条通过长度
步长
的点的路径,同时从不访问同一点两次

库(tidyverse)
种子集(1234)
距离表%
(函数(X)展开网格(X,X%>%setNames(c(“id_2”,“x2”,“y2”)))))%>%
过滤器(id!=id_2)%>%
突变(euc_dist=sqrt((x-x2)^2+(y-y2)^2))
步数=25
起始id=样本(1:100,1)
结果\u holder=tible(顺序=1:steps,位置\u id=numeric(steps),x=numeric(steps),y=numeric(steps))

结果\u holder$location \u id[1]当最接近点
m
为点
n
,然后最接近点
n
m
时会发生什么?你看了
dist
了吗?你可以运行命令
dput(你的数据)
并将输出粘贴到你的问题中。如果您这样做,其他人将能够处理您的数据并提出更明智的问题来帮助您。当最接近点
m
是点
n
,然后最接近点
n
m
时会发生什么?你看了
dist
了吗?你可以运行命令
dput(你的数据)
并将输出粘贴到你的问题中。如果您这样做,其他人将能够处理您的数据并提出更明智的问题来帮助您。