Матрица расстояний в R с использованием геосферы

У меня есть набор данных с информацией о международных инвестициях в Европе и координатами о NUTS3. Для каждой инвестиции у меня есть город и координаты (lat1,long1). Я хочу вычислить расстояние от каждого города до каждого из NUTS 3, которые у меня есть --> E.G. Париж в Париж, Париж_Лион, Париж_Орли, Париж_Мейденхед и т. д. и т. д. Я хочу зациклить этот механизм для всех городов, которые у меня есть, поэтому в конце у меня есть матрица для каждого города, которая включает его расстояние до каждого NUTS. Я пытался использовать геосферу, но она дает мне только расстояние между строками.

summary(coordinate$NUTS_BN_ID)
summary(fdimkt$NUTS_BN_ID)


##merge dataset
df <- merge(fdimkt,coordinate, by="nutscode", all = FALSE)
View(df)
fix(df)

#install.packages("dplyr")
library(dplyr)

df %>% dplyr::rename(lat1= `_destination_latitude`, long1= `_destination_longitude` )


library(geosphere)
library(data.table)
#dt <- expand.grid.df(df,df)

setDT(df)[ , dist_km := distGeo(matrix(c(`_destination_latitude`, `_destination_longitude`), ncol = 2), 
                                matrix(c(`lat2`, `long2`), ncol = 2))/1000]
summary(df$dist_km)

Это не сработало, потому что возвращает расстояние по строке, но на самом деле мне нужно расстояние от каждого города до всех координат NUTS3, которые у меня есть

Кто-нибудь может помочь мне с этим?

Я не уверен, как опубликовать свой dt, думаю, это может помочь получить больше предложений.


person Dalila    schedule 22.11.2019    source источник
comment
Вы хотите использовать distm(df) из пакета Geosphere. См. мой ответ здесь для примера: минимальное расстояние между широтой и долготой в нескольких кадрах данных"> stackoverflow.com/questions/58831578/. Также обратите внимание: пакет geosphere ожидает, что долгота будет первой колонкой, а широта — второй колонкой.   -  person Dave2e    schedule 23.11.2019
comment
Спасибо @Dave2e, я проверяю это. Просто чтобы быть ясным, я подготовил набор данных, чтобы он был long , lat как порядок. Обязательно ли делать прохождение data.frame? Поскольку у меня 30 000 строк, и я новичок в R в этих вещах, и я не знаю, нужно ли мне писать каждый i в c (12.5667, 45.6789 и т. д. и т. д.).   -  person Dalila    schedule 25.11.2019
comment
Вычисление всех расстояний между 30 000 точек потребует много времени и памяти, поэтому вы можете разбить задачу на более мелкие части. Ваш фрейм данных должен иметь два столбца, столбец долготы должен предшествовать столбцу широты. Если у вас есть вопросы, как привести ваши данные в правильный формат, выполните поиск здесь или задайте новый вопрос, разместив образец вашего data.frame.   -  person Dave2e    schedule 25.11.2019