Как получить расстояние между точками и несколькими другими - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь определить расстояния (евклидово) между точками, которые у меня есть в кадре данных, и другими в другом. Вот ниже пример данных.

x <- rnorm(5)
y <- rnorm(5)
df <- data.frame(x, y)

x1 <- rnorm(5)
y1 <- rnorm(5)
Id <- c(1:5)
df2 <- data.frame(Id, x1, y1)

Я попробовал эту формулу, чтобы получить расстояние:

sqrt(((df2$x1 - df$x)^2) + ((df2$y1 - df$y)^2))

Но я не могу найти, как получить расстояние между точками на Id в df1 и всех остальных в df

спасибо за помощь

1 Ответ

1 голос
/ 18 февраля 2020

Если вы хотите получить расстояния между каждой (x, y) точкой в ​​df2 и всеми другими (x, y) точками в df, вы можете сделать следующее, используя свою евклидову формулу расстояния:

euclid_dist <- function(x1, y1, x2, y2) {
  sqrt(((x1 - x2)^2) + ((y1 - y2)^2))
}

t(apply(df2, 1, function(a) euclid_dist(a[["x1"]], a[["y1"]], df[["x"]], df[["y"]])))

С вашими данными вы получите взамен:

set.seed(123)

x <- rnorm(5)
y <- rnorm(5)
df <- data.frame(x, y)

x1 <- rnorm(5)
y1 <- rnorm(5)
Id <- c(1:5)
df2 <- data.frame(Id, x1, y1)

         [,1]      [,2]     [,3]      [,4]      [,5]
[1,] 1.786003 1.9680289 3.070264 2.7295146 2.4865570
[2,] 1.525957 0.5911463 2.131949 1.2195161 0.9712662
[3,] 3.805099 2.5081895 1.353883 1.3216922 1.5449945
[4,] 1.215755 0.4171294 2.442043 1.3887899 1.1471688
[5,] 2.187861 0.9888714 2.258099 0.6619184 0.6856658

Эта матрица включает расстояния, где каждая строка представляет каждый Id в df2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...