Тщательно не проверено, но я верю, что это поможет вам.Я использую purrr::accumulate
.Это довольно изящная проблема :-) в надежде увидеть некоторые другие решения / подходы, так что, возможно, оставьте это открытым (без ответа) на некоторое время ...
library(purrr)
input <- c(24, 49, 74, 128, 146, 153, 165, 228, 303, 321, 356, 410, 532, 561, 601, 622, 634, 839, 882, 997)
idx <- which(accumulate(diff(input), ~ ifelse(.x >= 100, .y, .x + .y)) >= 100)
input[c(1, idx + 1)]
#> [1] 24 128 228 356 532 634 839 997
И чтобы это читалось немного больше purrr
, я полагаю, мы могли бы сделать:
accumulate(diff(input), ~ if_else(.x >= 100, .y, .x + .y)) %>%
map_lgl(~ . >= 100) %>%
which %>%
{ input[c(1, . + 1)] }