表X包含组和测量坐标的列表,例如:
X:
(组,测量坐标)
A 10
A 20
B 10
表Y包含一个有趣的坐标列表。
是:
(组,有趣的坐标)
A 3
A 5
A 25
B. 15
我想找出Y中最近的有趣坐标之间的距离,给出X中的坐标,所以输出是
Z
(组,测量坐标,距离最近的下坐标,距离最近的更高的坐标)
A 10 7 15
A 20 13 5
B 25 10 NA
知道如何在tidyverse/R中做到这一点吗?
发布于 2022-01-29 09:56:00
这里有个办法。代码创建一个标志,查看它是每组group和coordinate中的第一行还是最后一行。然后计算距离并将其重塑为宽格式。也许有更简单的方法,但它做的是问题的要求。
library(dplyr)
library(tidyr)
left_join(X, Y, by = "group", suffix = c("", ".y")) %>%
group_by(group) %>%
mutate(flag = cumsum(c(TRUE, diff(coordinate) == 0L))) %>%
group_by(group, coordinate) %>%
mutate(flag = flag == first(flag) | flag == last(flag)) %>%
filter(flag) %>%
select(-flag) %>%
mutate(distance = abs(coordinate - coordinate.y),
which_dist = ifelse(row_number() == 1L, "first", "last")) %>%
select(-coordinate.y) %>%
pivot_wider(
id_cols = -distance,
names_from = which_dist,
values_from = distance
)
## A tibble: 3 x 4
## Groups: group, coordinate [3]
# group coordinate first last
# <chr> <int> <int> <int>
#1 A 10 7 15
#2 A 20 17 5
#3 B 10 5 NAhttps://stackoverflow.com/questions/70903125
复制相似问题