У меня есть числовой вектор в 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
}
}