spatialEco (version 1.3-2)

knn: Spatial K nearest neighbor

Description

Find K nearest neighbors for two spatial objects

Finds nearest neighbor in x based on y and returns rownames, index and distance, If ids is NULL, rownames of x are returned. If coordinate matrix provided, columns need to be ordered [X,Y]. If a radius for d is specified than a maximum search radius is imposed. If no neighbor is found, a neighbor is not returned

You can specify weights to act as covariates for x and y. The vectors or matrices must match row dimensions with x and y as well as columns matching between weights. In other words, the covariates must match and be numeric.

Usage

knn(
  y,
  x,
  k = 1,
  d = NULL,
  ids = NULL,
  weights.y = NULL,
  weights.x = NULL,
  indexes = FALSE
)

Arguments

y

Spatial points or polygons object or coordinates matrix

x

Spatial points or polygons object or coordinates matrix

k

Number of neighbors

d

Optional search radius

ids

Optional column of ID's in x

weights.y

A vector or matrix representing covariates of y

weights.x

A vector or matrix representing covariates of x

indexes

(FALSE/TRUE) Return row indexes of x neighbors

Value

A data.frame with row indexes (optional), rownames, ids (optional) and distance of k

See Also

nn2 for details on search algorithm

Examples

Run this code
# NOT RUN {
 library(sp)
 data(meuse)
   coordinates(meuse) <- ~x+y
 
 idx <- sample(1:nrow(meuse), 10) 
   pts <- meuse[idx,]
   meuse <- meuse[-idx,]
     meuse$IDS <- 1:nrow(meuse)
 
 # Find 2 neighbors in meuse
 ( nn <- knn(pts, meuse, k=2, ids = "IDS", indexes = TRUE) )
    plot(pts, pch=19, main="KNN")
      points(meuse[nn[,1],], pch=19, col="red")

# Using covariates (weights)
wx = as.matrix(meuse@data[,1:3])
wy = as.matrix(pts@data[,1:3])

( nn <- knn(pts, meuse, k=2, ids = "IDS", indexes = TRUE,
            weights.y=wy, weights.x=wx) )
    plot(pts, pch=19, main="KNN")
      points(meuse[nn[,1],], pch=19, col="red")
	  
 # Using coordinate matrices
 y <- coordinates(pts)
 x <- coordinates(meuse)
 knn(y, x, k=2)
  
# }

Run the code above in your browser using DataLab