计算两个数据集的两点之间的距离(最近邻)

2023-12-22

我想计算两个不同数据集中两点之间的距离。我不想计算所有点之间的距离 - 只是到 datasetB 最近的点。
一些例子:

数据集 A - 人员
http://pastebin.com/HbaeqACi http://pastebin.com/HbaeqACi

数据集 B - 水特征:
http://pastebin.com/UdDvNtHs http://pastebin.com/UdDvNtHs

数据集 C - 城市:
http://pastebin.com/nATnkMRk http://pastebin.com/nATnkMRk

所以...我想计算每个人到最近的水景点的距离。
我已经尝试过与rgeos包,在与一些预测错误作斗争之后,我已经让它工作了。但这会计算(至少我假设)到每个点的所有距离,但是,正如已经说过的,我只对到最近的水景点的距离感兴趣。

# load csv files
persons = read.csv("persons.csv", header = TRUE)
water = read.csv("water.csv", header = TRUE)
# change dataframes to SpatialPointDataFrame and assign a projection
library(sp)
library(rgeos)
coordinates(persons) <- c("POINT_X", "POINT_Y")
proj4string(persons) <- CRS("+proj=utm +datum=WGS84")
coordinates(water) <- c("POINT_X", "POINT_Y")
proj4string(water) <- CRS("+proj=utm +datum=WGS84")

# use rgoes package to calculate the distance
distance <- gDistance(persons, water, byid=TRUE)
# works, but calculates a huge number of distances

有没有我遗漏的参数。或者我需要使用另一个包或函数吗?我还查看了 spatstat,它能够计算到最近邻居的距离,但不能计算两个不同数据集的距离:http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/spatstat/html/nndist.html http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/spatstat/html/nndist.html


Edit:
完整的 R 脚本,包括数据集的绘制:

library(RgoogleMaps)
library(ggplot2)
library(ggmap)
library(sp)
library(fossil)

#load data
persons = read.csv("person.csv", header = TRUE, stringsAsFactors=FALSE)
water = read.csv("water.csv", header =TRUE, stringsAsFactors=FALSE)
city = read.csv("city.csv", header =TRUE)

# plot data
persons_ggplot2 <- persons
city_ggplot2 <- city
water_ggplot2 <- water
gc <- geocode('new york, usa')
center <- as.numeric(gc)  
G <- ggmap(get_googlemap(center = center, color = 'bw', scale = 1, zoom = 11, maptype = "terrain", frame=T), extent="device")
G1 <- G + geom_point(aes(x=POINT_X, y=POINT_Y ),data=city, shape = 22, color="black", fill = "yellow", size = 4) + geom_point(aes(x=POINT_X, y=POINT_Y ),data=persons, shape = 8, color="red", size=2.5) + geom_point(aes(x=POINT_X, y=POINT_Y ),data=water_ggplot2, color="blue", size=1)
plot(G1)

#### calculate distance
# Generate unique coordinates dataframe
UniqueCoordinates <- data.frame(unique(persons[,4:5]))
UniqueCoordinates$Id <- formatC((1:nrow(UniqueCoordinates)), width=3,flag=0)

# Generate a function that looks for the closest waterfeature for each id coordinates
NearestW <- function(id){
tmp <- UniqueCoordinates[UniqueCoordinates$Id==id, 1:2]
WaterFeatures <- rbind(tmp,water[,2:3])
tmp1 <- earth.dist(WaterFeatures, dist=TRUE)[1:(nrow(WaterFeatures)-1)]
tmp1 <- which.min(tmp1)
tmp1 <- water[tmp1,1]
tmp1 <- data.frame(tmp1, WaterFeature=tmp)
return(tmp1)
}

#apply to each id and the merge
CoordinatesWaterFeature <- ldply(UniqueCoordinates$Id, NearestW)
persons <- merge(persons, CoordinatesWaterFeature, by.x=c(4,5), by.y=c(2,3))

编写一个为每个人寻找最近的水景的函数怎么样?

#requires function earth.dist from "fossil" package
require(fossil)

#load data
persons = read.csv("person.csv", header = TRUE, stringsAsFactors=FALSE)
water = read.csv("water.csv", header =TRUE, stringsAsFactors=FALSE)

#Generate unique coordinates dataframe
UniqueCoordinates <- data.frame(unique(persons[,4:5]))
UniqueCoordinates$Id <- formatC((1:nrow(UniqueCoordinates)), width=3,flag=0)


#Generate a function that looks for the closest waterfeature for each id coordinates
NearestW <- function(id){
   tmp <- UniqueCoordinates[UniqueCoordinates$Id==id, 1:2]
   WaterFeatures <- rbind(tmp,water[,2:3])
   tmp1 <- earth.dist(WaterFeatures, dist=TRUE)[1:(nrow(WaterFeatures)-1)]
   tmp1 <- min(tmp1)
   tmp1 <- data.frame(tmp1, WaterFeature=tmp)
   return(tmp1)
 }

#apply to each id and the merge
CoordinatesWaterFeature <- ldply(UniqueCoordinates$Id, NearestW)
persons <- merge(persons, CoordinatesWaterFeature, by.x=c(4,5), by.y=c(2,3))

注意:我在原始 read.csv 中添加了 stringsAsFactors 参数,它使最后的合并更容易

注意:tmp1 列记录了距最近水景的米数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算两个数据集的两点之间的距离(最近邻) 的相关文章

  • R 中带有文件名的 For 循环

    我有一个文件列表 例如 nE pT sbj01 e2 2 csv nE pT sbj02 e2 2 csv nE pT sbj04 e2 2 csv nE pT sbj05 e2 2 csv nE pT sbj09 e2 2 csv nE
  • par(mfrow=c(1,2)) 不显示并排密度图[重复]

    这个问题在这里已经有答案了 par mfrow c 1 2 plot 1 12 log y plot 1 2 xaxs i 然而 当我尝试做并排密度图时 图会单独输出 load the stud recs dataset library U
  • 如何在R中计算文本中的句子数?

    我使用 R 将文本读入readChar 功能 我的目的是测试文本句子中字母 a 出现次数与字母 b 出现次数一样多的假设 我最近发现了 stringr 包 它帮助我对文本做很多有用的事情 例如计算字符数以及整个文本中每个字母出现的总数 现在
  • 基于服务器中的条件逻辑呈现闪亮的用户输入

    我正在尝试设置一个闪亮的导航栏面板页面 其中用户控制我根据一组单选按钮中所做的初始选择来显示更改 我直接在 ui 中渲染单选按钮 然后在 Server r 中的 观察到的 逻辑控制结构内构建条件控件 弹出错误是因为我的初始 if 语句计算结
  • 如何在 ggplot 中保持配色方案,同时删除每个图中未使用的级别?

    我想比较一个图中的数据的一些子组和另一图中的一些其他子组 如果我绘制一个图 其中绘制了所有子组 那么这个数字将是巨大的 并且每个单独的比较都会变得困难 我认为如果给定的子组在所有图中都具有相同的颜色 这对读者来说会更有意义 这是我尝试过的两
  • 在 R 中创建一个运行计数变量?

    我有一个足球比赛结果的数据集 我希望通过创建一组类似于世界足球 Elo 公式的运行评级来学习 R 我遇到了麻烦 在 Excel 中看似简单的事情在 R 中并不完全直观 例如 4270 个观察中的前 15 个具有必要的变量 date t 1
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • 为什么 dplyr filter() 不能在函数内工作(即使用变量作为列名)?

    使用 dplyr 函数对数据进行过滤 分组和变异的函数 基本管道序列在函数之外工作得很好 这就是我使用真实列名称的地方 将其放入一个函数中 其中列名称是一个变量 并且某些函数可以工作 但有些函数则不能 尤其是 dplyr filter 例如
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 将阴影区域添加到五分位数之间的直方图中

    All 我有一个包含 2 个直方图的图表 其中我还绘制了代表第 20 40 60 和 80 个百分位数的线条 下面的代码使用虚拟数据重现了类似的图表 data lt rbind data frame x rnorm 1000 0 1 g o

随机推荐

  • 订阅者类没有在事件上调用的公共方法

    使用绿色 Robot Eventbus 时出现错误 E AndroidRuntime 2537 Caused by de greenrobot event EventBusException Subscriber class com exa
  • 使用 RVM 时如何在所有 gemset 上安装 gem

    使用 RVM 时 有没有办法在系统中的所有 ruby 和 gemset 不仅仅是默认或系统 ruby 上安装 gem 您可以执行 rvm global do gem install gem name 全局安装 gem 每个 ruby 版本
  • 使用 MSBuild 自动构建 Delphi 2010 项目

    我正在寻找使用 MSBuild 编译我的 Delphi 2010 项目 但有些事情不对劲 我只是无法让 MSBuild 编译我的项目 我尝试了这个命令行 C Windows Microsoft NET Framework v4 0 3031
  • AngularJS:将照片作为多部分表单数据上传并发布并获取响应

    我想上传图像并将其发布到我的服务器 该服务器应该将图像进一步发布到某些 API 并获取其响应 我可能可以将视图与类似的东西一起使用
  • 重新启动后,图库中图像的权限会丢失

    我的应用程序允许用户从图库或其他位置查看一些选定的图像 我通过以下方式请求图像的 Uri Intent photoPickerIntent new Intent Intent ACTION PICK photoPickerIntent se
  • Android 上出现“ 已恢复时意外恢复”消息是怎么回事?

    我的几个 Android 应用程序在 logcat 输出中显示以下类型的消息 I UsageStats 59 Unexpected resume of com totsp test while already resumed in com
  • 如何将动态数据添加到 QML 表

    我正在尝试从 Python 将行添加到表中 我正在使用用 QML 描述的 TableView 我不知道如何将模型添加到表中 除非模型也在 QML 中 但我不知道如何向模型添加值 import sys from PyQt5 QtCore im
  • Rails 中仅响应 json

    在我的只有 json 的 Rails 应用程序中 每当有人调用我的 Rails 应用程序并将接受标头设置为除 application json 之外的任何内容时 我想发送 406 代码 当我将内容类型设置为除 application jso
  • 我可以将评论信息保存在我的 Jar 文件中(由 Ant 生成)吗?

    当我使用 Ant 将项目构建为 Jar 文件时 我同时生成 javadoc 但是当我在新项目中使用这个 Jar 时 我在 Eclipse 中看不到 Jar 的注释 按 F2 因此 我尝试在新项目属性的 javadoc Location 中添
  • AngularJS:如何将 JSON 数据加载到作用域变量上

    我正在创建一个个人网站 我可以在其中不断更新内容 而无需操作HTML 我试图通过简单地加载和更新来实现这一点JSON文件 但现在我在加载时遇到问题JSON数据到scope多变的 HTML div div
  • 使用C#.net进行语音记录(winmm.dll)

    我的要求是构建一个实用程序 可以录制语音 通过麦克风 并将 wav 文件作为桌面和 Web 应用程序保存在磁盘上 对于特定用户 所以我选择了 activeX 技术 因为我没有找到任何其他更好的方法 也许你知道并且可以指导我 将非常受欢迎 我
  • 如何使用 Stream Writer 写入文件开头?

    我想将字符串插入到文件的开头 但是在流编写器中没有附加到开头的功能 那么我应该怎么做呢 我的代码是 string path Directory GetCurrentDirectory test txt StreamReader sreade
  • Go 中将 int 和 long 转换为字符串

    我有这样的并发例程 Routine 1 for 30 times Send string Routine 2 out lt chan string for case str lt out fmt Println str 现在 我想从例程 1
  • 同时通过管道发送到 grep 并重定向到 stdout

    在 Linux bash 中 我尝试运行命令并 grep 获取参数 command grep 但是 我需要重定向结果commad到标准输出并同时将其传送到 grep 我需要看到grep结果和command结果为标准输出 我用谷歌搜索了一下并
  • NHibernate 还是 Fluent NHibernate? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 部署 WAR 文件时出现问题。无法启动组件[]

    我目前在将 WAR 文件部署到 Tomcat7 服务器时遇到问题 我是使用 java 进行 Web 开发的新手 一切在 Eclipse 中运行良好 但是当我生成 WAR 文件并将其部署到服务器时 出现以下错误 无法启动组件 下面是日志转储
  • 在笔记本电脑上测试时使用 MeteorCamera.getPicture() 拍照时出错

    我正在努力使用 Meteor 的 mdg camera 插件向我的应用程序添加照片功能 目前 我没有任何 PhoneGap 设备设置 因此我正在我的笔记本电脑上进行测试 我想我在某处读到 当相机不可用时 Meteor 实现会回退并使用简单的
  • 使用 OpenCV detectorMultiScale 来找到我的脸

    我很确定我的总体主题是正确的 但我没有找到任何面孔 我的代码读取自c cv2 VideoCapture 0 即计算机的摄像机 然后 我进行以下设置以产生面部所在的位置 正如您所看到的 我正在循环遍历不同的scaleFactors和minNe
  • 在 C# 中使用 MailMessage 发送电子邮件

    我在使用 MailMessage 发送电子邮件时遇到一些问题 我有两个电子邮件帐户 电子邮件受保护 cdn cgi l email protection and 电子邮件受保护 cdn cgi l email protection 并且我希
  • 计算两个数据集的两点之间的距离(最近邻)

    我想计算两个不同数据集中两点之间的距离 我不想计算所有点之间的距离 只是到 datasetB 最近的点 一些例子 数据集 A 人员 http pastebin com HbaeqACi http pastebin com HbaeqACi