如何计算R中三维坐标系中两点之间的距离

How to calculate distance between two points in a three dimensional coordinate system in R

我正在尝试计算三维坐标系中两点之间的距离。我有两点:1) 'Release' (x, y, z),和 2) 'Recapture' (x, y, z)。我想为每个重新捕获的个体计算这两点之间的欧氏距离。

我在 R 中导入的数据集如下所示:

|              | Rel_x   | Rel_y   | Rel_z  | Rec_x   | Rec_y   | Rec_z  | Distance |
|--------------|---------|---------|--------|---------|---------|--------|----------|
| Individual_1 | 231.114 | 177.002 | 17.329 | 228.288 | 178.908 | 17.243 | ?        |
| Individual_2 | 239.028 | 178.789 | 16.526 | 239.057 | 178.706 | 16.499 | ?        |
| Individual_3 | 212.109 | 210.142 | 18.791 | 212.300 | 208.693 | 18.372 | ?        |

我还想添加一列(距离)来报告两点'Release'和'Recapture'之间的欧式距离。

我试过使用 dist() 函数,但我不确定我的代码行是否正确,例如

dist (data_set), method = "euclidean", diag = FALSE, upper = FALSE, p = 2) 

当我 运行 这行代码时,我收到以下内容:

Warning message: In dist(data_set) : NAS introduced by coercion 

你有什么建议吗?

将数据框一分为二,分别为每个点Release和Recapture,然后计算Euclidean metric。

例如,假设您的数据框名为 df,前三列用于第一个点,接下来的 3 列用于第二个点:

sqrt(rowSums(((df[,1:3]-df[,4:6])^2))

我建议只写出来。调用您的数据 data_set 我们可以将另一个答案改编成有效的答案:

data_set$distance = sqrt(rowSums((data_set[, 1:3] - data_set[, 4:6])^2))

更安全的方法是命名列,而不是依赖于位置顺序:

data_set$distance = sqrt(rowSums(
  (data_set[, c('Rel_x', 'Rel_y', 'Rel_z')] - data_set[, c('Rec_x', 'Rec_y', 'Rec_z')])^2
))