#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
значения, которые могут оказаться нежелательными.