Вектор расщепления в нулевых элементах - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть числовой вектор в R с интервалами увеличения целых чисел, разделенных произвольным числом нулей.Пример:

x = c(0, 0, 1, 2, 3, 0, 0, 1, 2, 0)

Я хотел бы найти элемент max() / last в каждом из этих увеличивающихся интервалов, разделенных нулями.Для данного примера это будет:

result
[1] 3 2

Делая это, циклически перебирая элементы x, можно выполнить работу, но она выглядит довольно примитивно (код приведен ниже).Поскольку я новичок в R и не могу найти более разумный способ, возможно, используя cut() и split(), я буду признателен за совет по более элегантному решению.Спасибо!

x  <-  c(0, 0, 1, 2, 3, 0, 0, 1, 2, 0)
interval_max <- 0
interval_counter <- 0
result <- 0
in_interval = FALSE


for (n in 1:10){
  if (x[n]>0){
    if (in_interval){
      result[interval_counter] <- x[n]
    }
    else {
      interval_counter <-  interval_counter + 1
      result[interval_counter] <- x[n]
      in_interval <- TRUE
    }
  }
  else {
    in_interval <- FALSE
  }
}

1 Ответ

0 голосов
/ 04 февраля 2019

Если все, что вам нужно, это значения, то:

x <- c(0, 0, 1, 2, 3, 0, 0, 1, 2, 0)
x[diff(x) < 0]
# [1] 3 2

Конечно, это предполагает, что значения всегда увеличиваются и затем сбрасываются в ноль.

...