Есть ли способ, которым мы можем заполнить NA
s в zoo
или xts
объект с ограниченным номером NA
s вперед. Другими словами, как заполнить NA
s до 3 последовательных NA
s, а затем сохранить NA
s от 4-го значения до действительного числа.Заполнить NA во временном ряду только ограниченное число
Нечто подобное.
library(zoo)
x <- zoo(1:20, Sys.Date() + 1:20)
x[c(2:4, 6:10, 13:18)] <- NA
x
2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26
1 NA NA NA 5 NA NA
2014-09-27 2014-09-28 2014-09-29 2014-09-30 2014-10-01 2014-10-02 2014-10-03
NA NA NA 11 12 NA NA
2014-10-04 2014-10-05 2014-10-06 2014-10-07 2014-10-08 2014-10-09
NA NA NA NA 19 20
Желаемая выход, будет что-то с переменной п = 3
2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26
1 1 1 1 5 5 5
2014-09-27 2014-09-28 2014-09-29 2014-09-30 2014-10-01 2014-10-02 2014-10-03
5 NA NA 11 12 12 12
2014-10-04 2014-10-05 2014-10-06 2014-10-07 2014-10-08 2014-10-09
12 NA NA NA 19 20
Я попробовал много комбинации с na.locf(x, maxgap = 3)
и т.д., без особого успеха. Я могу создать цикл, чтобы получить желаемый результат, мне было интересно, существует ли векторизованный способ достижения этого.
fillInTheBlanks <- function(v, n=3) {
result <- v
counter0 <- 1
for(i in 2:length(v)) {
value <- v[i]
if (is.na(value)) {
if (counter0 > n) {
result[i] <- v[i]
} else {
result[i] <- result[i-1]
counter0 <- counter0 + 1
} }
else {
result[i] <- v[i]
counter0 <- 1
}
}
return(result)
}
Благодаря
Добавление некоторых сценариях использования, когда мы имеем qtrly данные и мы знаем, что данные будут хорошими в течение следующих 3 месяцев и могут составлять максимум еще 3 месяца, но все, что выходит за пределы приемлемого предела, должно сделать данные действительно NA и не должно заполнять его до бесконечного типа сценариев. –