Вот один из способов сделать это, используя for
l oop:
library(nngeo)
cities = cities
towns = towns
nearest = st_nn(towns, cities, returnDist = TRUE, k = 2)
for(k in 1:2) {
towns[[paste0("nearest_id_", k)]] = sapply(nearest[[1]], "[", k)
towns[[paste0("nearest_dist_", k)]] = sapply(nearest[[2]], "[", k)
}
Полученную таблицу с новыми столбцами nearest_id_1
, nearest_dist_1
, nearest_id_2
и nearest_dist_2
:
head(towns)
## Simple feature collection with 6 features and 8 fields
## geometry type: POINT
## dimension: XY
## bbox: xmin: 34.93 ymin: 31.26 xmax: 35.33 ymax: 32.94
## CRS: EPSG:4326
## name country.etc pop capital geometry nearest_id_1
## 12 'Afula Israel 39151 0 POINT (35.29 32.62) 3
## 17 'Akko Israel 45606 0 POINT (35.08 32.94) 3
## 40 'Ar'ara Israel 15841 0 POINT (35.1 32.49) 3
## 41 'Arad Israel 22757 0 POINT (35.22 31.26) 1
## 43 'Arrabe Israel 20316 0 POINT (35.33 32.85) 3
## 52 'Atlit Israel 4686 0 POINT (34.93 32.68) 3
## nearest_dist_1 nearest_id_2 nearest_dist_2
## 12 34146.94 2 76186.87
## 17 18265.72 2 98838.31
## 40 35274.25 2 53968.63
## 41 56364.74 2 100503.63
## 43 32476.24 2 99234.65
## 52 13825.36 2 67407.32
Это должно работать для любого k
, которое меньше, чем число объектов во втором слое (три, в данном конкретном примере).