gpt4 book ai didi

r - 根据另一个 tibble 过滤 mutate 中的一个 tibble?

转载 作者:行者123 更新时间:2023-12-04 15:49:26 29 4
gpt4 key购买 nike

我有两个 tibbles,ranges 和 sites。第一个包含一组坐标(区域、开始、结束以及其他字符变量),另一个包含一个站点(区域、站点)。我需要获取第二个小标题中第一个小标题中给定范围(行)内的所有站点。使事情复杂化的是,第一个小标题中的范围重叠。

# Range tibble
region start end var_1 ... var_n
1 A 1 5
2 A 3 10
3 B 20 100
# Site tibble
region site
1 A 4
2 A 8
3 B 25

大约 200,000 个范围在大约 10 亿个站点上可能长达 100,000 秒,所以我不喜欢我的想法,即制作范围内所有值的列表、取消嵌套、半连接、分组和总结的方案(a_list = list(site))'ing.

我希望得到类似这样的东西:

range_tibble %>%
rowwise %>%
mutate(site_list = site_tibble %>%
filter(region.site == region.range, site > start, site < end) %>%
.$site %>% as.list))

产生像这样的小声:

# Final tibble
region start end site_list var_1 ... var_n
<chr> <dbl> <dbl> <list> <chr> <chr>
1 A 1 5 <dbl [1]>
2 A 3 10 <dbl [2]>
3 B 20 100 <dbl [1]>

我已经看到使用外部变量“gets”的答案(即 filter(b == get("b")),但是我如何从 tibble 范围内的当前行获取变量?任何聪明的管道还是我没有想到的语法?完全不同的方法也很棒,只要它能很好地处理大数据并且可以转回小标题。

最佳答案

使用 left_join() 合并两个数据框,使用 summarise() 连接指定范围内包含的站点。

library(dplyr)

range %>%
left_join(site) %>%
filter(site >= start & site <= end) %>%
group_by(region, start, end) %>%
summarise(site = list(site))

# region start end site
# <fct> <dbl> <dbl> <list>
# 1 A 1 5 <dbl [1]>
# 2 A 3 10 <dbl [2]>
# 3 B 20 100 <dbl [1]>

数据

range <- data.frame(region = c("A", "A", "B"), start = c(1, 3, 20), end = c(5, 10, 100))
site <- data.frame(region = c("A", "A", "B"), site = c(4, 8, 25))

关于r - 根据另一个 tibble 过滤 mutate 中的一个 tibble?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54501852/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com