【问题标题】:How to get distance between points and multiple others如何获得点和多个其他点之间的距离
【发布时间】:2020-06-01 17:31:32
【问题描述】:

我正在尝试确定数据框中的点与另一个数据框中的其他点之间的距离(欧几里得)。 下面是一个数据示例。

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 中获取点之间的距离

感谢您的帮助

【问题讨论】:

  • 您想要的结果究竟是什么?您是否想要 5 个 Id 中的每一个与所有 df 点的距离?那将给出 25 个距离(或每个 Id 5 个距离)?
  • 我想要df2 中五个Id 中的每一个的距离。那会给我 25 个正确的距离。
  • 是的!,对不起,我没有看到你是回答我的问题并评论帖子的人。

标签: r spatial euclidean-distance


【解决方案1】:

如果您想获取df2 中每个 (x,y) 点与 df 中所有其他 (x,y) 点之间的距离,您可以使用欧几里德距离公式执行以下操作:

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

此矩阵包含每行代表df2 中的每个Id 的距离。

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 2012-02-08
    • 2019-07-26
    相关资源
    最近更新 更多