簡體   English   中英

如何計算數據框中兩個連續點之間的距離和角度?

[英]How to calculate distance and angle between two consecutive points in data frame?

我有 R 的數據框:

my_data_points <- data.frame(x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
 y = c(10, 9, 8, 7, 6, 6, 7, 8, 9, 10))

如何計算兩個連續點 p1(1, 10) 和 p2(2, 9)、p2(2, 9) 和 p3(3, 8) 等之間的歐氏距離和角度?

例如,我可以將此函數用於距離:

dist_func <- function(x1, x2, y1, y2) {
  sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
}

但它使用來自兩個不同行的數據。 如何實施?

使用已定義的dist函數,默認情況下計算歐氏距離矩陣,並使用atan2獲取兩點之間的角度,我們可以得到以下結果:

as.matrix(dist(my_data_points)) -> mat
c(mat[row(mat) == col(mat) + 1], NA) -> my_data_points$dists
my_data_points %>% mutate(angle = c(atan2(diff(x),diff(y)), NA) * 180/pi)
    x  y    dists angle
1   1 10 1.414214   135
2   2  9 1.414214   135
3   3  8 1.414214   135
4   4  7 1.414214   135
5   5  6 1.000000    90
6   6  6 1.414214    45
7   7  7 1.414214    45
8   8  8 1.414214    45
9   9  9 1.414214    45
10 10 10       NA    NA

我們可以使用dplyr lag

library(dplyr)
my_data_points %>% 
       mutate(out = dist_func(x, lag(x), y, lag(y)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM