Мне нужно уменьшить последовательный NA в векторе до одного NA, не касаясь других значений.
Так, например, задан такой вектор:
NA NA 8 7 NA NA NA NA NA 3 3 NA -1 4
что мне нужно получить, это следующий результат:
NA 8 7 NA 3 3 NA -1 4
В настоящее время я использую следующую функцию:
reduceConsecutiveNA2One <- function(vect){
enc <- rle(is.na(vect))
# helper func
tmpFun <- function(i){
if(enc$values[i]){
data.frame(L=c(enc$lengths[i]-1, 1), V=c(TRUE,FALSE))
}else{
data.frame(L=enc$lengths[i], V=enc$values[i])
}
}
Df <- do.call(rbind.data.frame,lapply(1:length(enc$lengths),FUN=tmpFun))
return(vect[rep.int(!Df$V,Df$L)])
}
и, похоже, он работает нормально, но, вероятно, есть более простой/быстрый способ выполнить эту задачу.
Любые предложения?
Спасибо заранее.