我有两个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之间的欧式距离。
您有什么建议吗?
答案 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
函数,其中新矩阵的第一行是y
,z
和您的数据集那一行的x1
观测值,新矩阵的第二行是您的数据集那一行的y1
,z1
和{{1}}观测值。< / p>