R中的空间最近邻分配

2023-11-25

我正在开展一项研究,试图根据特定个人的地址将颗粒物暴露情况分配给他们。我有两个带有经度和纬度坐标的数据集。一种 if 适合个人,另一种 if 适合下午暴露块。我想根据最接近的块为每个主题分配一个下午曝光块。

library(sp)
library(raster)
library(tidyverse)

#subject level data
subjectID<-c("A1","A2","A3","A4")

subjects<-data.frame(tribble(
~lon,~lat,
-70.9821391,    42.3769511,
-61.8668537,    45.5267133,
-70.9344039,    41.6220337,
-70.7283830,    41.7123494
))

row.names(subjects)<-subjectID

#PM Block Locations 
blockID<-c("B1","B2","B3","B4","B5")

blocks<-data.frame(tribble(
~lon,~lat,
-70.9824591,    42.3769451,
-61.8664537,    45.5267453,
-70.9344539,    41.6220457,
-70.7284530,    41.7123454,
-70.7284430,    41.7193454
))

row.names(blocks)<-blockID

#Creating distance matrix
dis_matrix<-pointDistance(blocks,subjects,lonlat = TRUE)

###The above code doesnt preserve the row names. Is there a way to to do 
that?

###I'm unsure about the below code
colnames(dis_matrix)<-row.names(subjects)
row.names(dis_matrix)<-row.names(blocks)

dis_data<-data.frame(dis_matrix)

###Finding nearst neighbor and coercing to usable format 
getname <-function(x) {
row.names(dis_data[which.min(x),])
}

nn<-data.frame(lapply(dis_data,getname)) %>% 
gather(key=subject,value=neighbor)

这段代码给了我有意义的输出,但我不确定有效性和效率。任何有关如何改进和修复此代码的建议都将受到赞赏。我还收到错误消息:

Warning message:
attributes are not identical across measure variables;
they will be dropped 

我无法确定其起源。

谢谢参观!


以下是一些示例数据,说明了如何使用pointDistance:

library(raster)

#subject level data
subjectID <- c("A1","A2","A3","A4")
subxy <- matrix(c(-65, 42, -60, 4.5, -70, 20, -75, 41 ), ncol=2, byrow=TRUE)
#PM Block Locations 
blockID <- c("B1","B2","B3","B4","B5")
blockxy <- matrix(c(-68, 22, -61, 25, -70, 31, -65, 11,-63, 21), ncol=2, byrow=TRUE)

# distance of all subxy to all blockxy points
d <- pointDistance(subxy, blockxy, lonlat=TRUE)

# get the blockxy record nearest to each subxy record
r <- apply(d, 1, which.min)
r
#[1] 3 4 1 3

所以这些对是:

p <- data.frame(subject=subjectID, block=blockID[r])
p

#  subject block
#1      A1    B3
#2      A2    B4
#3      A3    B1
#4      A4    B3

说明它的工作原理:

plot(rbind(blockxy, subxy), ylim=c(0,45), xlab='longitude', ylab='latitude')
points(blockxy, col="red", pch=20, cex=2)
points(subxy, col="blue", pch=20, cex=2)
text(subxy, subjectID, pos=1)
text(blockxy, blockID, pos=1)
for (i in 1:nrow(subxy)) {
    arrows(subxy[i,1], subxy[i,2], blockxy[r[i],1], blockxy[r[i],2])
}

arrows plot

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

R中的空间最近邻分配 的相关文章

随机推荐

  • 使用React手动刷新react-query onClick

    当我重新获取查询时 当我有 onClick 按钮时 它会进入 正在更新 状态 但我希望重新获取查询并显示 正在加载 状态 我的代码是 https stackblitz com edit react ts jfq8ve file index
  • php chmod() 不更改权限

    我的图片上传脚本有问题 我知道有数百个相同的问题 但我还没有找到适合我的问题 upload dir images postcards chmod upload dir 777 if is writable upload dir echo T
  • 永久代是堆的一部分还是位于 jvm 中的不同空间中

    我看到了很多关于这个问题的评论 有人说是 有人说不是 而且许多答案都是模棱两可的 任何人都可以用更简单的术语描述它所在的位置吗 在一篇文章中 我什至看到有人说它与类内存共享相同的内存位置 其中类由类加载器加载 这是真的吗 原始 可能是错误的
  • Web语音API:在iOS safari上一致获取支持的语音合成声音

    我正在尝试获取 iOS Safari 上支持的语音合成声音列表 根据 API 我应该能够通过调用获取一系列声音 window speechSynthesis getVoices 有时这会给我声音列表 有时则不会 请参阅以下 jsfiddle
  • 为什么我不需要显式借出借用的可变变量?

    我刚刚编写了一个小的 Rust 程序 它计算斐波那契数并记住计算结果 它有效 但我对为什么有点困惑 尤其是递归调用 这也可能不是惯用语 这是程序 use std collections HashMap fn main let n 42 ha
  • 如何初始化具有默认值的类的函数参数

    我正在 Linux gcc 环境中工作 我需要初始化具有默认值的类的函数参数 当我使用类的临时实例执行此操作时 会出现如下错误 函数参数 的默认参数具有类型 类名 例如 void foo std wstring str std wstrin
  • 是什么导致 Vim 中的替换每行只匹配一个元素?

    我已经对我的自己做了很多改变 vimrc最近 我在某个地方引入了一个不受欢迎的功能 当执行搜索标记每行出现多次的替换命令时 只有第一个标记会发生更改 尽管其余标记会因替换而突出显示 我在这里看到了一些关于如何根据具体情况启用此行为的帖子 但
  • 使用 AngularJS、ui.Router 和 yeoman 进行 Livereload Html5 Pushstate

    我想用我的 Angular js 应用程序修复 livereload 我正在使用 yoeman ui router 和 html5 推送状态 a必须做什么 指数对于搜索引擎 您必须将以下内容添加到你的index html The app在您
  • Android ImageView模糊动画

    我正在寻找添加模糊动画ImageView 但有设定的持续时间 例如 我希望图像随着时间的推移而变得模糊 我已经有了模糊图像的方法 但我需要的是让它在 2 秒内从模糊变为不模糊 有人可以帮我吗 编辑 这是我目前模糊图像的方法 public B
  • Metro 风格应用程序中的 XAML 图像质量(插值)

    给定以下 Image 对象 它位于 ListView 对象的 DataTemplate 中
  • BLE 多重连接

    是否可以通过低功耗蓝牙连接多个传感器标签 在TI提供的应用程序中 传感器标签是服务器 应用程序是客户端 那么 单个客户端可以连接多个服务器吗 是的 可以从一个应用程序连接到多个 BLE 设备 另一方面 目前 Android BLE 堆栈 B
  • RabbitMQ 上 celery 任务优先级的解决方法?

    我在 RabbitMQ 之上运行 Django 和 Celery 作为队列来处理一些数据处理任务 当用户首次注册时 我会启动 celery 任务 并定期更新他们的数据 但是 我当然想优先处理当前在线用户运行的任务 我注意到celery中的任
  • HTML5 验证输入仅接受字母

    我有一个输入的名字
  • Java中如何获取包含前N个unicode字符的子字符串

    Java 中的 String 数据类型让我们通过 codePointCount 知道字符串中有多少个 unicode 字符 以及如何通过 codePointAt 获取第 n 个 unicode 字符 我想知道是否有一个 API 可以获取 J
  • 如何修复“此证书无法由受信任的证书颁发机构验证”

    我在 IE9 中遇到安全证书问题 然后我转到我得到的具体地址 There is a problem with this website s security certificate 如何避免出现此窗口 我尝试输入 继续访问此网站 不推荐 证
  • 我可以生成带有 Multipart 参数的 Spring Feign 客户端吗?

    我收到错误 方法有太多主体参数 当尝试生成 Spring Feign 客户端时 RequestMapping value media method RequestMethod POST String uploadMedia RequestH
  • 对 7 个整数的数组进行排序的最快方法是什么?

    这是分析扑克 特别是德州扑克 赔率的程序的一部分 我有一个我很满意的程序 但它需要一些小的优化才能完美 我使用这种类型 当然还有其他类型 type T7Cards array 0 6 of integer 在决定如何对其进行排序时 有关此数
  • Ninject InRequestScope 回退到 InThreadScope

    在我的 MVC3 项目中 我将内核设置为Ninject the 实体框架上下文关于InRequestScope基础 这工作完美 但我有一个后台运行程序可以进行一些工作流程管理 它每 5 分钟启动一个新线程 我Ninject我对此线程的依赖关
  • 如何删除批处理文件中用户提供的输入的尾随和前导空格?

    我知道在预定义变量时如何执行此操作 但是 当要求用户输入某种输入时 如何修剪前导和尾随空格 这是我到目前为止所拥有的 echo off set p input echo The input is input before trim left
  • R中的空间最近邻分配

    我正在开展一项研究 试图根据特定个人的地址将颗粒物暴露情况分配给他们 我有两个带有经度和纬度坐标的数据集 一种 if 适合个人 另一种 if 适合下午暴露块 我想根据最接近的块为每个主题分配一个下午曝光块 library sp librar