Вы, вероятно, могли бы сделать это, используя удобную функцию из пакета zoo . Например, na.approx
с maxgap = 1
должно линейно интерполировать все промежутки длины один. Тогда вы, вероятно, захотите использовать na.aggregate
, разделив по годам и часам, чтобы заполнить более длинные промежутки средним значением этих периодов.
Вот простой пример, чтобы дать вам представление о том, как работают эти функции:
set.seed(124)
tt <- as.POSIXct("2000-01-01 10:00:00") + 3600*c(1:100,10000:10100)
dd <- runif(201)
aa <- data.frame(x1 = tt,x2 = dd)
aa$x2[sample(201,30)] <- NA
aa$x3 <- na.approx(aa$x2,maxgap = 1)
aa$x4 <- na.aggregate(aa$x3,by = format(aa$x1,"%Y-%H"))
Обратите внимание, что если ваша серия имеет начальные или конечные значения NA
s, вы можете получить ошибки, поскольку в этом случае фрагмент "линейной интерполяции" не имеет большого смысла. Поэтому вам придется заполнить их другим способом.