R найти ближайшие точки в матрице
R: поиск линии в матрице с точками, близкими к двум выбранным точкам.
У меня есть матрица с long/lat для области. И у меня есть точка в этой области с долготой и широтой, поэтому мне нужно найти точку в матрице, которая лучше всего подходит.
Я пробовал это, но это не работает:
find.point <- is.numeric(which(abs(matrix[,1]-East)==min(abs(matrix[,1]-East)))
&& which(abs(matrix[,2]-North)==min(abs(matrix[,2]-North))))
Как найти точку, где восток ближе всего к матрице [,1], а также север ближе всего к матрице [,2]?
1 ответ
Без каких-либо конкретных данных от вас, довольно сложно вам точно помочь. Но если предположить, что вы хотите вычислить ближайшую точку с евклидовым расстоянием и что ваши данные чем-то похожи на приведенные ниже, это может показать, как вы можете это сделать:
# Create some toy data
set.seed(1)
pos <- matrix(runif(20), 10, 2)
colnames(pos) <- c("lon", "lat")
print(pos)
# lon lat
# [1,] 0.26550866 0.2059746
# [2,] 0.37212390 0.1765568
# [3,] 0.57285336 0.6870228
# [4,] 0.90820779 0.3841037
# [5,] 0.20168193 0.7698414
# [6,] 0.89838968 0.4976992
# [7,] 0.94467527 0.7176185
# [8,] 0.66079779 0.9919061
# [9,] 0.62911404 0.3800352
#[10,] 0.06178627 0.7774452
new.pos <- c(0.5, 0.5) # New position
# Compute distance to points and select nearest index
nearest.idx <- which.min(colSums((t(pos) - new.pos)^2))
nearest.idx
#[1] 9
# Pick out the point
pos[nearest.idx, ]
# lon lat
#0.6291140 0.3800352
Линия, которая вычисляет расстояния, опирается на два факта: 1) матрицы в R хранятся в главном порядке столбцов и 2) правила повторного использования / повторения R, когда вектор слишком короткий.