根据纬度和经度获取K个最近邻域

编程入门 行业动态 更新时间:2024-10-28 15:33:44
本文介绍了根据纬度和经度获取K个最近邻域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有不同点的纬度和经度数据。这是我的数据的一个简单版本:

# Add library library(tidyverse) # Generate data distance <- tibble( location = c("first", "second", "third"), lat = c(33.720792, 33.715187, 33.714848), long = c(-84.468126, -84.468684, -84.454265) )

它会生成如下所示的数据:

# A tibble: 3 x 3 location lat long <chr> <dbl> <dbl> 1 first 33.7 -84.5 2 second 33.7 -84.5 3 third 33.7 -84.5

我想做的是利用这些纬度和经度来获得每个位置最近邻居的完整排名。例如,理想情况下,我的最终数据应该如下所示:

如您所见,此新数据框中的第一列包含距离位置第一个最近的邻居,第二列提供下一个最近的邻居,依此类推。

有人知道如何制作我需要的数据框吗?

推荐答案

您可以使用fnn包查找k个最近邻居。它可以很好地处理大量数据,因此即使使用大型数据集,您也应该能够使用以下代码找到完整的排名:

# Add library library(tidyverse) library(FNN) #> Warning: pakke 'FNN' blev bygget under R version 4.0.4 # Generate data distance <- tibble( location = c("first", "second", "third"), lat = c(33.720792, 33.715187, 33.714848), long = c(-84.468126, -84.468684, -84.454265) ) # Find KNN knn <- distance %>% select(lat,long) %>% get.knn(k = nrow(.) - 1) knn #> $nn.index #> [,1] [,2] #> [1,] 2 3 #> [2,] 1 3 #> [3,] 2 1 #> #> $nn.dist #> [,1] [,2] #> [1,] 0.005632707 0.01508173 #> [2,] 0.005632707 0.01442298 #> [3,] 0.014422985 0.01508173 # Identify locations loc <- knn$nn.index loc[] <- distance$location[loc] colnames(loc) <- paste0("neighbour_",1:ncol(loc)) loc #> neighbour_1 neighbour_2 #> [1,] "second" "third" #> [2,] "first" "third" #> [3,] "second" "first" # final data distance %>% select(location) %>% bind_cols(loc %>% as_tibble()) #> # A tibble: 3 x 3 #> location neighbour_1 neighbour_2 #> <chr> <chr> <chr> #> 1 first second third #> 2 second first third #> 3 third second first

由reprex package(v0.3.0)于2021-03-25创建

更多推荐

根据纬度和经度获取K个最近邻域

本文发布于:2023-10-30 08:55:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1542375.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:邻域   经度   纬度

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!