r-在给定表x中的值的情况下,从表y中查找组中的下一个最低值和下一个最高值



表X包含组和测量坐标的列表,例如:

X:
(组,测量坐标(
A 10
A 20
B 10

表Y包含感兴趣的坐标列表,例如

Y:
(组,有趣的坐标(
A3
A5
A25
B15

我想在给定X坐标的情况下,找到Y中最接近的感兴趣坐标之间的距离,所以输出将是

Z
(组、测量坐标、到最近的较低坐标的距离、到最近较高坐标的距离(
A 10 7 15
20 13 5
B 25 10 NA

你知道如何在tidyverse/R中做到这一点吗?

这里有一种方法。该代码创建一个标志,查看它是每组groupcoordinate中的第一行还是最后一行。然后计算距离并将其重塑为宽格式。可能有更简单的方法,但它能满足问题的要求。

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    NA

最新更新