我有一个类似于以下示例的数据集。对于每个code
,我想计算到与其相邻的下一个最近代码的距离。因此,在我的示例中,对于属于区域A001的每个代码,我将在数据集中的另一列之后,该列包含与属于区域A001的其他点之一的最小距离。我认为应该有一种使用area
的方法来实现这一目标?
st_distance
答案 0 :(得分:1)
到达这里可能会有一种“更清洁”的方式,但这可以为您提供正确的值。
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
对象的方法。