首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表y中找到表x中给定值的下一个最低值和下一个最高值。

从表y中找到表x中给定值的下一个最低值和下一个最高值。
EN

Stack Overflow用户
提问于 2022-01-29 07:16:25
回答 1查看 21关注 0票数 0

表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中做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-29 09:56:00

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70903125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档