R 计算大型数据集的经度和纬度之间的距离

R 计算大型数据集的经度和纬度之间的距离,r,R,我有一个大型数据集(df)(有300000间房屋),我有每次观测的经度和纬度。以下(df1)是数据的前10个观测值: df1 <- read.table(sep=",", col.names=c("lat", "lon"), text=" 53.543526,-8.047727 51.88029, -9.583830 52.06056, -9.488551 51.87087, -9.577604 51.89530, -8.454321 51.95688, -7.851760 53.3762

我有一个大型数据集(df)(有300000间房屋),我有每次观测的经度和纬度。以下(df1)是数据的前10个观测值:

df1 <- read.table(sep=",", col.names=c("lat", "lon"), text="
53.543526,-8.047727
51.88029, -9.583830
52.06056, -9.488551
51.87087, -9.577604
51.89530, -8.454321
51.95688, -7.851760
53.37621, -6.392430
53.37719, -6.234660
51.88029, -9.583830
51.88145, -9.600894")
但我一直在犯错误:

.PointToMatrix(x)中的错误:纬度<-90

我有两个问题:

  • 如何计算从数据帧“df”中的300000个观测值到“中心”数据点的距离

  • 假设我想计算每所房子到学校列表的距离(一个较小但较大的数据集,数百个)(例如下面的df2)。我如何计算每所房子到每所学校的距离,然后保持最小距离

  • 学校数据集示例:

    df2 <- read.table(sep=",", col.names=c("lat", "lon"), text="
    53.38271, -6.437433
    53.34874, -6.131537
    53.34449, -6.266856
    53.34424, -6.267444
    53.34648, -6.261414
    53.64333, -8.208663")
    

    df2使用
    distm
    功能从
    geosphere
    包中计算两个矩阵之间的每个点之间的距离,其中每行表示
    df1
    对象,列表示
    df2
    对象:

    library(geosphere)
    distm(df1, df2)
    
                [,1]      [,2]       [,3]       [,4]       [,5]      [,6]
     [1,] 178968.962 213003.58 198172.550 198110.991 198746.488  20923.34
     [2,] 385376.082 414721.59 400788.464 400717.802 401428.071 246442.51
     [3,] 367573.615 397518.53 383398.252 383327.609 384038.877 224390.48
     [4,] 385203.033 414495.46 400578.857 400508.198 401218.340 246836.89
     [5,] 276963.269 302892.13 290037.267 289967.750 290660.977 194456.76
     [6,] 221966.904 244628.53 232857.426 232790.237 233455.843 190049.84
     [7,]   5028.478  29011.20  14323.587  14267.385  14857.496 203015.38
     [8,]  22432.536  11830.79   5076.573   5141.969   4505.897 220278.46
     [9,] 385376.082 414721.59 400788.464 400717.802 401428.071 246442.51
    [10,] 387024.885 416408.72 402463.993 402393.330 403103.685 247508.26
    
    至于你提到的错误,我在使用
    distm

    distm(df1, centre, fun = distHaversine)
                [,1]
     [1,]   4675.419
     [2,] 247250.726
     [3,] 225526.648
     [4,] 247555.321
     [5,] 186051.181
     [6,] 176912.553
     [7,] 189843.467
     [8,] 207320.670
     [9,] 247250.726
    [10,] 248435.392
    

    我想你的纬度坐标不好。您的错误显示纬度小于-90,这是不可能的。最低纬度是-90度。执行以下操作以检查缺点:

    badPoints <- which(df1$lat < -90)
    print(df1[badPoints,])
    
    goodDf1 <- df1[(df1$lat >= -90 & df1$lat <= 90),]
    

    缺点我也有类似的问题。问题是经度和纬度是字符列。将它们转换为数字列解决了问题。

    这取决于使用的函数,例如,
    distm
    ,使用长lat格式是的,您是对的,抱歉-现在已更新Hi Felipe-抱歉,如果不清楚,则df1只是我300000次观察中的前10次观察。如果我把它扩展到所有300000个观测值,我就会得到这个错误。因此,如果我想计算30万所房子到500所学校的距离,我认为上述方法是行不通的。这取决于你的记忆力。看看这个问题,谢谢。该页中的代码和该页中的代码对我也不起作用。因此,我的数据集太大,无法正常工作。令人担忧的是……嗨,不幸的是,事实并非如此,所有的观察结果都不符合这一点criteria@PMc糟糕-那将是一个容易解决的问题。您可以尝试在每一行中循环,计算距离,直到找到错误并检查它崩溃的那一行是否奇怪。
    goodDf1 <- df1[(df1$lat >= -90 & df1$lat <= 90),]