Имам голяма рамка от данни (> 8 милиона реда) с наблюдения на хора и различни сайтове. Интересувам се да разгледам близостта на тези сайтове до няколко ключови места (1 местоположение през 2014 г. и 2 местоположения през 2015 г.).
За да минимизирам броя на изчисленията (и да ускоря нещата), използвах dplyr, за да свия всички известни местоположения само до един представителен сайт за всяка година и след това се опитах да използвам функцията distGeo, за да изчисля разстоянието, когато годината съвпада .
dist <- df %>%
mutate(year = year(ts)) %>% #ts is the time stamp for each observation
select(site, lat, lon, year) %>%
group_by(site, lat, lon, year) %>%
summarise(n=n()) %>% #if I stop after summarise, the data frame has been reduced to 93 observations
mutate(dist1 = ifelse(year == "2014",
distGeo(c(-64.343043, 45.897932), #coordinates for key location in 2014
df[,c("lon", "lat")])/1000,
NA_real_)) #I have a similar lines for the two key locations in 2015
Самото изпълнение на тази част отнема ~30 минути, а резултатът е разстояние от 740,1656 км за всеки обект от 2014 г. Как мога да поправя този код, за да осигуря правилното разстояние и в идеалния случай да ускоря изчисленията?
РЕДАКТИРАНЕ:
Както е предложено по-долу, ето решението:
dist <- df %>%
mutate(year = year(ts)) %>%
select(site, lat, lon, year) %>%
group_by(site, lat, lon, year) %>%
summarise(n=n()) %>%
mutate(dist1 = ifelse(year == "2014",
pmap_dbl(list(lon, lat),
~distVincentyEllipsoid(c(-64.343043, 45.897932),
c(.x, .y))/1000),
NA_real_)