3

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

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)

}

谢谢!!!

4

1 回答 1

2

总是给出一些你的数据和输出的例子,让你更容易回答这个问题。一种选择是让您仅并行该过程或尝试使用dplyrmutate。

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))
于 2017-09-26T14:15:37.387 回答