R中两个3D点之间的距离

时间:2018-10-24 10:44:15

标签: r euclidean-distance

我有两个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之间的欧式距离。

您有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您正在寻找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

reprex package(v0.2.1)于2018-10-24创建

来自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()函数应用于从该行构造的矩阵中调用的x函数,其中新矩阵的第一行是yz和您的数据集那一行的x1观测值,新矩阵的第二行是您的数据集那一行的y1z1和{{1}}观测值。< / p>