У меня есть пример двух домов и пяти магазинов.У каждого магазина есть предел того, насколько далеко он готов доставить (водосбор).Я хотел бы знать, для каждого дома, сколько магазинов доставят в дом.Вот пример (на самом деле у меня 1 млн домов и 17 тыс. Магазинов).
library(FNN)
xh <- c(3,8)
yh <- c(8,2)
house.df <- data.frame(cbind(xh,yh))
xs <- c(3,3,5,8,8)
ys <- c(3,6,8,9,4)
catchment <- c(3,3,4,6,3)
store.df <- data.frame(cbind(xs,ys,catchment))
plot(house.df$xh,house.df$yh,pch=16,xlim=c(0,10),ylim=c(0,10))
par(new=TRUE)
plot(store.df$xs,store.df$ys,xlim=c(0,10),ylim=c(0,10))
nndist <- knnx.dist(store.df[,c("xs","ys")],house.df[,c("xh","yh")], k=4)
nnindex <- knnx.index(store.df[,c("xs","ys")],house.df[,c("xh","yh")], k=4)
nndist
[,1] [,2] [,3] [,4]
[1,] 2 2.00000 5.000000 5.099020
[2,] 2 5.09902 6.403124 6.708204
nnindex
[,1] [,2] [,3] [,4]
[1,] 3 2 1 4
[2,] 5 1 2 3
Здесь я только что попросил 4 (из 5 ближайших магазинов).Дом 1 может обслуживаться магазинами 3, 2 и 4, потому что он находится в их водосборном бассейне, но не в магазине 3, который имеет ограничение на водосбор 3. Дом 2 может обслуживаться только магазином 5, все остальные расстояния находятся вне магазинов 1,2 и 3-х водосборный.В конце я хотел бы получить:
nnserve
[,1] [,2] [,3] [,4]
[1,] 3 2 NA 4
[2,] 5 NA NA NA
Если бы во всех магазинах был одинаковый охват, я мог бы просто использовать:
# distances greater than 3 ignore
nndist[nndist>3]<-NA
Я пытался сделать репликацию nnindex.но имейте в качестве входных данных список магазинов:
nncatchment
[,1] [,2] [,3] [,4]
[1,] 4 3 3 6
[2,] 3 3 3 4
, а затем проводите поэлементное сравнение nndist и nncatchment, но не знаете, как создать nncatchment.Спасибо.