本文介绍了根据纬度和经度获取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个最近邻域
发布评论