Как преобразовать вложенную операцию цикла в более эффективный код в R - PullRequest
0 голосов
/ 25 ноября 2018

Я дилетант, когда дело доходит до кодирования R.Я пытаюсь запустить следующий код для одной из задач.Моя основная цель состоит в том, чтобы подсчитать количество достопримечательностей в пределах 2 км от определенного местоположения, и достопримечательности, и местоположения определяются соответствующей долготой и широтой.Количество записей в основном наборе данных составляет около 29 КБ, а количество аттракционов - 28. Как я могу вместо этого преобразовать следующий код в более эффективный R-код (текущий действительно грубый и не очень хорошая практика)

for(i in 1:nrow(mainData)) {
  attr_count[i] = 0  
  loc_coord = c(mainData$longitude[i],mainData$latitude[i])
  for(j in 1:nrow(ny_attractions)) {
    attr_coord = c(ny_attractions$lon[j],ny_attractions$lat[j])
    dist = distVincentySphere(attr_coord,loc_coord)
    if(dist <= 2000) {
      attr_count[i] = attr_count[i] + 1
    } 
  }
}

[РЕДАКТИРОВАТЬ]: Мои извинения за то, что я не сформулировал это раньше.Вот пример того, чего я пытаюсь достичь.У меня есть 2 набора данных -

Набор данных - 1 (NYC_attractions) (27 записей)
введите описание изображения здесь

Набор данных-2 (основные данные для списков домов) (29 тыс. Записей) введите описание изображения здесь

Теперь мне нужно добавить еще один столбец (num_of_attractions) в наборе данных-2, представляющий количество достопримечательностей в пределах 2 км от указанного списка (т.е. для каждой записи в наборе данных-2)

Надеюсь, это объясняет проблему

Спасибо

1 Ответ

0 голосов
/ 25 ноября 2018

Здравствуйте, на ваш вопрос здесь частично дан ответ https://stackoverflow.com/a/49860968/3042154. Поскольку вы используете геодезические координаты (широта / долгота) вместо проецируемых координат (метры), это можно сделать с шагом.Сначала приблизительно выберите потенциальных соседей, используя евклидово расстояние, используя данный ответ, затем уточните выбор, используя ваше расстояние

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