也许你可以使用fields
包:功能rdist
可能会做你想要什么:
rdist:欧氏距离矩阵
说明:由于两套位置计算出所有配对中的欧氏距离矩阵。
> rdist(df1, df2)
[,1] [,2] [,3] [,4] [,5]
[1,] 4.582576 6.782330 2.000000 1.732051 2.828427
[2,] 4.242641 5.744563 1.732051 0.000000 1.732051
[3,] 4.123106 5.099020 3.464102 3.316625 4.000000
[4,] 5.477226 5.000000 4.358899 3.464102 3.316625
[5,] 7.000000 5.477226 5.656854 4.358899 3.464102
类似的是与pdist
包的情况下
pdist:观测之间的距离为一个分块矩阵
明计算的另一矩阵X的行和列之间的欧几里德距离矩阵Y.
> pdist(df1, df2)
An object of class "pdist"
Slot "dist":
[1] 4.582576 6.782330 2.000000 1.732051 2.828427 4.242640 5.744563 1.732051
[9] 0.000000 1.732051 4.123106 5.099020 3.464102 3.316625 4.000000 5.477226
[17] 5.000000 4.358899 3.464102 3.316625 7.000000 5.477226 5.656854 4.358899
[25] 3.464102
attr(,"Csingle")
[1] TRUE
Slot "n":
[1] 5
Slot "p":
[1] 5
Slot ".S3Class":
[1] "pdist"
#
注意:如果你正在寻找行之间的欧几里得范,你可能会想尝试:
a <- c(1,2,3,4,5)
b <- c(5,4,3,2,1)
c <- c(5,4,1,2,3)
df1 <- rbind(a, b, c)
a2 <- c(2,7,1,2,3)
b2 <- c(7,6,5,4,3)
c2 <- c(1,2,3,4,5)
df2 <- rbind(a2,b2,c2)
rdist(df1, df2)
这给:
> rdist(df1, df2)
[,1] [,2] [,3]
[1,] 6.164414 7.745967 0.000000
[2,] 5.099020 4.472136 6.324555
[3,] 4.242641 5.291503 5.656854
这看起来很有用,但不是答案。你应该展示如何在问题中的数据上实现答案;所以只有链接的答案在SO上不会很好。 – alistaire
@alistaire感谢您的评论。这是它应该看起来如何? – Diego
是的,那太好了! – alistaire