Я хотел бы привязать отдельные точки к другим точкам в зависимости от их расстояния в R. Подробно у меня есть куча точек, определяемая координатными парами X и Y. Кроме того, у меня есть разные точки, которые я хочу привязать к ближайшим соседям (эвклидовое расстояние).Получить ближайшую точку, основанную на координатах
# target points
df <- data.frame(X=c(1,2,2,2,3,4),Y=c(1,2,2,3,3,4))
# points that need snapping
point1 <- data.frame(X=2.1, Y=2.3)
point2 <- data.frame(X=2.5, Y=2.5)
plot(df)
points(point1$X,point1$Y,pch=20,col="red")
points(point2$X,point2$Y,pch=20,col="blue")
Но как действовать с привязкой очков? Как я могу привязать точки и назначить новые пары координат в одиночные точки? Есть ли простая функция, доступная в R? Или мне нужно применить функцию dist() для получения матрицы расстояния и выполнить поиск ближайшего расстояния? Возможно, есть более прямой путь.
Вот как это должно выглядеть следующим образом:
1) привязываются к ближайшим (евклидова расстояния) точка (прозрачный раствор для точки 1)
point1$X_snap <- 2
point1$Y_snap <- 2
2), если две или более точек, подобным образом тесными, чем привязка к тому, что является более «северо-восточным» a) сначала привязайте к тому, который больше север (направление Y) b) если имеется более одного, чем аналогичное расстояние по оси Y, то есть к тому, которое более восточный
point2$X_snap <- 3
point2$Y_snap <- 3
Для графической иллюстрации, как результат должен выглядеть
#plot snapped points:
points(point1$X_snap,point1$Y_snap,pch=8,col="red")
points(point2$X_snap,point2$Y_snap,pch=8,col="blue")