У меня есть два тибля, диапазоны и места.Первая содержит набор координат (регион, начало, конец и другие символьные переменные), а другая содержит сайты (регион, сайт).Мне нужно получить все сайты во втором столбце, которые попадают в заданный диапазон (ряд) в первом столбце.Сложные вопросы, диапазоны в первом стакане перекрываются.
# 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 может длиться 100 000 с более чем на миллиарде сайтов, поэтому мне не нравится моя идея составить список всех значений в диапазоне, unnesting, semi_join 'ing, группирование и подведение итогов (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]>
Я видел ответы, использующие "get" внешней переменной (то есть filter (b == get ("b")), но как бы я получил переменную из текущей строки в диапазоне tibble«Любые умные каналы или синтаксис, о которых я не думаю». Также отлично подходит совершенно другой подход, если он хорошо работает с большими данными и может быть превращен в тиббл.