Я хотел бы привязать отдельные точки к другим точкам на основе их расстояния в 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) если две или более точек одинаково близки, чем привязка к той, которая находится более «северо-восточнее» а) сначала привязываются к той, которая находится севернее (направление Y) б) если есть более одной, которые одинаково удалены по 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")