在数据帧上应用sqrt函数

时间:2017-07-06 20:16:28

标签: r apply

我想在每两个点之间计算以下等式,我不知道如何在整个数据集中应用它:

Point  x y z
1      4 3 8
2      8 5 4
3      5 4 7
4      2 7 4

D1,2 = sqrt((x2-x1)²+ (y2-y1)²+( z2-z1)²)

1 个答案:

答案 0 :(得分:0)

最好使用dist来计算评论中建议的距离。

data.frame(as.matrix(dist(df[,-1], diag = TRUE, upper = TRUE)))

您也可以使用sapply自行计算距离(或应用其他公式)

sapply(1:NROW(df), function(i)
    sapply(1:NROW(df), function(j)
        sqrt(diff(df$x[c(i,j)])^2 + diff(df$y[c(i,j)])^2 + diff(df$z[c(i,j)])^2)))
#         [,1]     [,2]     [,3]     [,4]
#[1,] 0.000000 6.000000 1.732051 6.000000
#[2,] 6.000000 0.000000 4.358899 6.324555
#[3,] 1.732051 4.358899 0.000000 5.196152
#[4,] 6.000000 6.324555 5.196152 0.000000