I有一个空间矢量(spatoods),分组以分组为单位。我想计算每个点到组中的第一个点的距离。
Trans2024_df
Name Distance_to_first
1 T01 0
2 T01 1.2
3 T01 2.5
4 T02 0
5 T02 0.5
6 T02 1.2
7 T02 1.7
8 T03 0
9 T03 1.3
我设法达到了前面的距离。
VectorPoints_sf <- st_as_sf(VectorPoints)
VectorPoints_sf %>%
mutate(
distance_next = sf::st_distance(
geometry,
lead(geometry),
by_element = TRUE))
Name distance_next
1 T01 0
2 T01 1.2
3 T01 1.3
4 T02 5
5 T02 0.5
6 T02 0.7
7 T02 1.5
8 T03 2
9 T03 1.3
但我不知道如何到达第一个点的距离。 我以为它可以与dplr :: first()一起使用
VectorPoints_sf %>%
group_by(Transect) %>%
mutate(
distance_first = sf::st_distance(
geometry,
first(geometry),
by_element = TRUE))
但是我会收到以下错误:
Error in `stopifnot()`:
ℹ In argument: `distance_first = sf::st_distance(geometry, geometry[1], by_element = TRUE)`.
ℹ In group 1: `Transect = "T09"`.
Caused by error in `sf::st_distance()`:
! length(x) == length(y) is not TRUE
library(terra)
v <- vect(matrix(runif(40), ncol=2), crs="local")
v$ID <- sample(rep(LETTERS[1:5], each=4))
缩小距离
x <- lapply(split(v, "ID"), \(x) distance(x[1], x[-1]))
将它们一起在data.frame
中输入
do.call(rbind, lapply(names(x), \(i) data.frame(group=i, dist=t(x[[i]]))))
# group dist
#1 A 0.8582356
#2 A 0.9665782
#3 A 0.6253639
#4 B 0.3387519
#5 B 0.6647694
#6 B 0.3004775
#7 C 0.5647327
#8 C 0.8115395
#9 C 0.4722487
#10 D 0.7140878
#11 D 0.8428825
#12 D 0.5384567
#13 E 0.8268007
#14 E 0.6973941
#15 E 0.5094854