![](/img/trans.png)
[英]Calculate nearest point coordinate and distance by differing years between two data frames using sf
[英]Distance to nearest point by group using sf
我有一個看起來與下面的示例相似的數據集。 對於每個code
我想計算到與它屬於同一area
的下一個最近代碼的距離。 因此,在我的示例中,對於屬於區域A001的每個代碼,我將在數據集中的另一列之后,該列包含與屬於區域A001的其他點之一的最小距離。 我認為應該有一種使用st_distance
來實現這一目標?
require("data.table")
require("sf")
dt1 <- data.table(
code=c("A00111", "A00112","A00113","A00211","A00212","A00213","A00214","A00311","A00312"),
area=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
x=c(325147,323095,596020,257409,241206,248371,261076,595218,596678),
y=c(286151,284740,335814,079727,084266,078283,062045,333889,337836))
sf1 <- st_as_sf(dt1, coords = c("x","y"), crs=27700, na.fail=FALSE)
到達這里可能會有一種“更清潔”的方法,但這可以為您提供正確的值。
library(tidyverse)
# intermediate fun to help later in apply()
smallest_non_zero <- function(x) {
min_val <- min(x[x != 0])
x[match(min_val, x)]
}
closest_grp_distances <- sf1 %>%
group_split(area) %>%
map(~st_distance(., .) %>% # returns matrix
apply(1, smallest_non_zero)) %>%
unlist()
sf1$closest_grp_distances <- closest_grp_distances
我想使用baseR split
但是它沒有用於sf
對象的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.