首页 > 解决方案 > R中两个3D点之间的距离

问题描述

我有两个 2 点 A(x,y,z) e B(x1,y1,z1)。我想在时间1,时间2,时间3计算这些点之间的欧几里得距离。

所以,我有一个这样的矩阵:

         x     y     z     x1     y1     z1    distance
time1    2     1     2      4      6      8       ?
time2    3     4     3      6      6      7       ?
time3    6     8     9      4      3      3       ?

如上所示,我想添加一列(距离),在其中报告 A e B 之间的欧几里得距离。

你有什么建议吗?

标签: reuclidean-distance

解决方案


您正在寻找以下dist()功能:

df <- read.table(header = TRUE, text = "
         x     y     z     x1     y1     z1
time1    2     1     2      4      6      8
time2    3     4     3      6      6      7
time3    6     8     9      4      3      3")

df$distance <- apply(df, 1, function(x) dist(matrix(x, nrow = 2, byrow = TRUE)))

df
#>       x y z x1 y1 z1 distance
#> time1 2 1 2  4  6  8 8.062258
#> time2 3 4 3  6  6  7 5.385165
#> time3 6 8 9  4  3  3 8.062258

来自help("dist")

描述

此函数计算并返回通过使用指定的距离度量计算出的距离矩阵,以计算数据矩阵的行之间的距离。

用法

dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)

所以,如果你给它一个m

2 1 2
4 6 8

distance(m)c(2, 1, 2)将计算和之间的欧几里得距离c(4, 6, 8)。然后我们可以对数据集的每一行应用dist()从该行构造的矩阵调用的函数,其中新矩阵的第一行是数据集该行的xyz观察值,而新矩阵的第二行矩阵是数据集那一行的 、 和 观察x1y1z1


推荐阅读