首页 > 解决方案 > 计算R中2个位置之间的距离

问题描述

我有一个数据框 [df],例如:

id  pos1                 pos2
1   -103.3671_43.0835    -103.3660_43.0812  
2   -103.3634_43.0855    -103.3656_43.0872  
3   -103.3684_43.0884    -103.3695_43.0890  
4   -103.3613_43.0835    -103.3600_43.0825

我想知道是否有一种方法可以计算 pos1 和 pos2 之间的距离(以米为单位)?

非常感谢您的任何建议。

标签: r

解决方案


也许你可以试试下面的代码

p1 <- as.data.frame(`class<-`(do.call(rbind,strsplit(df$pos1,"_")),"numeric"))
p2 <- as.data.frame(`class<-`(do.call(rbind,strsplit(df$pos2,"_")),"numeric"))

df$dist <- diag(geosphere::distm(p1,p2))

这样

> df
  id              pos1              pos2     dist
1  1 -103.3671_43.0835 -103.3660_43.0812 270.7631
2  2 -103.3634_43.0855 -103.3656_43.0872 260.3055
3  3 -103.3684_43.0884 -103.3695_43.0890 111.6475
4  4 -103.3613_43.0835 -103.3600_43.0825 153.4549

数据

> dput(df)
structure(list(id = 1:4, pos1 = c("-103.3671_43.0835", "-103.3634_43.0855", 
"-103.3684_43.0884", "-103.3613_43.0835"), pos2 = c("-103.3660_43.0812",
"-103.3656_43.0872", "-103.3695_43.0890", "-103.3600_43.0825"
)), class = "data.frame", row.names = c(NA, -4L))

推荐阅读