Наибольшее перенесенное наблюдение

#r

#r

Вопрос:

Я пытаюсь перенести самое высокое наблюдение вперед в векторе, заменяя как NAs, так и любое значение, меньшее, чем последнее самое высокое наблюдение. Например.

 c(1,2,3,NA,NA,2,NA,NA,4,NA,NA)
  

стал бы

 c(1,2,3,3,3,3,3,3,4,4,4)
  

Каков наилучший способ сделать это векторизованным способом?

Комментарии:

1. Векторизованный? Это должно быть итеративно, я не думаю, что это можно распараллелить.

Ответ №1:

 x <- c(1,2,3,NA,NA,2,NA,NA,4,NA,NA)
y <- x
y[is.na(y)] <- -Inf
y <- cummax(y)
y[y == -Inf] <- NA
#[1] 1 2 3 3 3 3 3 3 4 4 4
  

Комментарии:

1. Отличное использование -Inf и cummax , третий шаг приводит к желаемому результату, и не -Inf остаются экземпляры, какая-либо конкретная причина для четвертого шага

2. @Osssan В начале вектора могут быть NA значения. Если вы пропустите этот шаг, вы получите там -Inf значения, которые могут оказаться нежелательными.