Программа R для хорошей сегментации чисел - PullRequest
0 голосов
/ 09 февраля 2020

Учитывая массив неправильных чисел и диапазон целых чисел, определите самый длинный сегмент целых чисел в этом включающем диапазоне, который не содержит неправильное число

Например, вам дан нижний предел l = 3 и верхний предел r = 48. Массив badNumbers = [37,7,22,15,49,60] Сегменты без плохих чисел: [3,6], [8,14], [16,21], [23, 36] и [38,48]. Самый длинный сегмент - [23,36], длина - 14 элементов.

1 Ответ

0 голосов
/ 09 февраля 2020
library(tidyverse)
library(data.table)

lower_limit <- 3L
upper_limit <- 48L
bad_numbers <- c(37L, 7L, 22L, 15L, 49L, 60L)


df_seq <- tibble(sequence = c(seq(lower_limit, upper_limit)))

df_seq %>%
  mutate(is_bad = sequence %in% bad_numbers,
         categories = rleid(is_bad)) %>%
  group_by(categories) %>%
  summarise(min_cat = min(sequence),
            max_cat = max(sequence)) %>%
  mutate(diff = max_cat - min_cat) %>%
  top_n(1, diff) %>%
  select("number_from" = min_cat, "number_to" = max_cat)
...