Это основано на предположении, что список метеостанций небольшой и, следовательно, не повлияет на время вычислений:
library(dplyr)
library(purrr)
df_with_homes_stats = df_with_homes %>%
dplyr::mutate(closestZip = purrr::map_dbl(.x=homeZip,~df_with_stats$stationZip[which.min(abs(.x-df_with_stats$stationZip))])) %>%
dplyr::left_join(df_with_stats,by=c('closestZip'='stationZip'))
Здесь 'df_with_homes' - большой набор данных с почтовыми индексами каждого дома и«df_with_stats» соответствует почтовым индексам станций.Основное предположение здесь, расстояние между почтовыми индексами пропорционально математической разнице между ними.
Дайте мне знать, если это работает.