R 计数距离太长
我有一个超过1000万行的数据帧。 我想计算lat-lon对之间的距离,并将它们添加到nem列中。 我已经尝试运行脚本(见下文),但它花费的时间太长(超过5个小时)。 有什么技巧可以提高这个过程的速度吗?我使用geosphere包计算lat-lon对之间的距离R 计数距离太长,r,for-loop,geosphere,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]),
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)
}
for(i在seq_len(nrow(dm_kekk))中)
{
dm_kekk$dist[i]总是给出一些数据和输出的示例,以使回答问题更容易一些。
一种选择是,您只需并行处理或尝试使用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)
谢谢你的回答。dplyr方式给出了一个错误,所以正确的代码看起来像:mutate(dist=distm(cbind(lon,lat),cbind(lon_ok,lat_ok,fun=distHaversine))
.HI@deaux,如果解决方案有效,您能将问题标记为正确吗?此外,您是否进行了基准测试以找出哪种解决方案是最佳的?HI@Hanjo Jo'burg Odendaal!dplyr方法比并行方法快得多。但是distm的语法不正确。正确的代码看起来像:mutate(dist=distm(cbind(lon,lat),cbind(lon_-ok,lat_-ok,fun=distHaversine))
。
library(dplyr)
dm_kekk %>% mutate(dist = distm(lon, lat, lon_ok, lat_ok, fun = distHaversine))