我有两个 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 之间的欧几里得距离。
你有什么建议吗?
您正在寻找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, 方法 = "欧几里得", 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
数据集该行的观测值。