如何计算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
))
我正在尝试计算三维坐标系中两点之间的距离。我有两点: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
))