Вычислить «ближайшего соседа» при использовании group_by () в R - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь найти расположение центроидов GPS-координат в сегментах трековой линии. Затем найдите индексы ближайших соседей между этими точками центроидов и координатами GPS в одном и том же сегменте линии трека.

До сих пор я нашел центроид каждого сегмента, а затем нашел метод для получения индексов этих ближайших соседей. к моим GPS-координатам, но я не могу заставить R найти только ближайших соседей в том же сегменте.

# Calculate the average Latitude/Longitude for each 'Segment'
data_update <- data %>% as.tibble() %>% 
group_by(Segment) %>% mutate(ave_lat = mean(Latitude), ave_lon = mean(Longitude))


# Find the nearest neighbour
install.packages('RANN')
library(RANN)

closest <- RANN::nn2(data_update[,2:3], data_update[,4:5], k = 1, searchtype = "radius", radius = 1) 
closest <- sapply(closest, cbind) %>% as_tibble

# closest produces two columns nn.idx and nn.dist - I need nn.idx only

# data_update[,2] = Longitude values (decimal degrees)
# data_update[,3] = Latitude values (decimal degrees)
# data_update[,4] = average longitude value for each Segment (decimal degrees)
# data_update[,5] = average latitude value for each Segment (decimal degrees)

Мне нужно использовать nn2 для вычисления nn.idx в каждом «Сегменте», а не во всем фрейме данных, как это делает код выше.

Кто-нибудь знает, как сгруппировать функцию nn2 для вычисления ближайшего соседа по 'сегменту'? Я также открыт для нереализованных вариантов.

Пример данных можно найти здесь: https://drive.google.com/file/d/16cZPo6kXIafU0ezAoy8EgB9CHVEDUTe-/view?usp=sharing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...