我有两个数据帧df1,df2,包含经度(lon)和纬度(lat)值 . 对于df1中的每一行,我想计算df2中每个条目的测地距离(以英里为单位),并返回距离小于30英里的条目数 .

我现在所拥有的似乎有效,但速度极慢:

require(Imap)
    n30 = function(lon,lat) {
        d=apply(df2[,c("lon","lat")],1,FUN=function(x) {
            gdist(lon,lat,x[1],x[2],units="miles")})
        return(sum(d<=30,na.rm=T))  
    }
    df1$n30 = apply(df1[,c("lon","lat")],1,FUN=function(x) n30(x[1],x[2]))

有人建议加快这个吗?谢谢!