Listing number of obervations by location

前端 未结 2 1946
不思量自难忘°
不思量自难忘° 2021-01-26 17:46

Need help here. I am trying to create a new column that will list the number of restaurants with in 200 meters of a restaurant using latitude and longitude. I couldn\'t find any

2条回答
  •  情深已故
    2021-01-26 18:39

    One approach would be to compute the distance matrix, and then to figure out the ones that are sufficiently close (here I demonstrate being within 20 kilometers so the numbers aren't all 0):

    # Load the fields library
    library(fields)
    
    # Create a simple data frame to demonstrate (each row is a restaurant). The rdist.earth function
    # we're about to call takes as input something where the first column is longitude and the second
    # column is latitude.
    df = data.frame(longitude=c(-111.9269, -111.8983, -112.1863, -112.0739, -112.2766, -112.0692),
                    latitude=c(33.46337, 33.62146, 33.65387, 33.44990, 33.56626, 33.48585))
    
    # Let's compute the distance between each restaurant.
    distances = rdist.earth(df, miles=F)
    distances
    
    #          [,1]     [,2]     [,3]         [,4]     [,5]         [,6]
    # [1,]  0.00000 17.79813 32.07533 1.373515e+01 34.41932 1.344867e+01
    # [2,] 17.79813  0.00000 26.93558 2.510519e+01 35.61413 2.189270e+01
    # [3,] 32.07533 26.93558  0.00000 2.498676e+01 12.85352 2.162964e+01
    # [4,] 13.73515 25.10519 24.98676 1.344145e-04 22.84310 4.025824e+00
    # [5,] 34.41932 35.61413 12.85352 2.284310e+01  0.00000 2.122719e+01
    # [6,] 13.44867 21.89270 21.62964 4.025824e+00 21.22719 9.504539e-05
    
    # Compute the number of restaurants within 20 kilometers of the restaurant in each row.
    df$num.close = colSums(distances <= 20) - 1
    df$num.close
    # [1] 3 1 1 2 1 2
    

提交回复
热议问题