r - 计算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 之间的距离(以米为单位)?
非常感谢您的任何建议。
解决方案
也许你可以试试下面的代码
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))
推荐阅读
- ruby - 配置 Lambda 函数 (Ruby) 以访问 Amazon RDS(mysql) 并执行 CRUD 操作
- java - Stripe Android - AddPaymentMethodActivityStarter 获取页脚布局事件
- vba - 尝试使用 VBA 在 PowerPoint 中激活幻灯片时在文件中打印某些内容
- django - Django Rest Framework:如何在 DEBUG = True 的情况下使用 EXCEPTION_HANDLER?
- timing - 八度 listDlg 函数;在等待 X 秒等待用户输入后,我可以让 listDlg() 函数返回吗?
- java - 如何让 ExecuterService 在返回 Android Java 中的值之前完成一个线程?
- python - 为什么我在重力模型中的粒子会相互排斥?
- angular10 - 升级到 Angular 10 后,Angular 解析器停止工作
- c - 在 C 中打印 long double
- c# - 如何使用数据表更新部分数据库?