使用sf按组到最近点的距离

时间:2019-02-20 23:28:08

标签: r data.table distance sf

我有一个类似于以下示例的数据集。对于每个code,我想计算到与其相邻的下一个最近代码的距离。因此,在我的示例中,对于属于区域A001的每个代码,我将在数据集中的另一列之后,该列包含与属于区域A001的其他点之一的最小距离。我认为应该有一种使用area的方法来实现这一目标?

st_distance

1 个答案:

答案 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对象的方法。