计算距离太长

时间:2017-09-26 14:01:00

标签: r for-loop geosphere

我有一个超过1000万行的数据框。 我想计算lat-lon对之间的距离,并将它们添加到nem列。 我试图运行脚本(见下文),但这需要太长时间(超过5小时)。 任何提示我怎样才能提高这个过程的速度?我使用geosphere包来计算lat-lon对之间的距离。

for (i in seq_len(nrow(dm_kekk)))
{
dm_kekk$dist[i]<-distm (c(dm_kekk$lon[i], dm_kekk$lat[i]), 
                         c(dm_kekk$lon_ok[i], dm_kekk$lat_ok[i]), 
                         fun = distHaversine)

}

感谢!!!

1 个答案:

答案 0 :(得分:1)

总是举一些您的数据示例以及您希望更轻松地回答问题的输出。 一种选择是让您只是平行过程或尝试使用dplyr mutate。

library(doParallel)
cores <- detectCores() -1
cl <- makeCluster(cores)
registerDoParallel(cl)

oper_dist <- foreach(i=1:seq_len(nrow(dm_kekk))) %dopar% {
library(geosphere)
  distm (c(dm_kekk$lon[i], dm_kekk$lat[i]), 
                     c(dm_kekk$lon_ok[i], dm_kekk$lat_ok[i]), 
                     fun = distHaversine)
}
stopCluster(cl)
dm_kekk$dist <- do.call(c, oper_dist)

或使用mutate

library(dplyr)

dm_kekk %>% mutate(dist = distm(lon, lat, lon_ok, lat_ok, fun = distHaversine))