[R] Interpolation in time

Gabor Grothendieck ggrothendieck at gmail.com
Thu Oct 6 16:19:32 CEST 2005


Is doy intended to represent the number of days since the beginning
of the year?  In that case convert the first two columns to class Date
and interpolate using approx.  See ?approx for variations:

tt <- as.Date(paste(yr, 1, 1, sep = "-")) + doy - 1
ta[,"dat"] <- approx(tt, dat, tt)$y

Even better would be to create an irregular time series object.

library(zoo)
tt <- as.Date(paste(yr, 1, 1, sep = "-")) + doy - 1
ta.z <- na.approx(zoo(dat, tt))

Now ta.z is a zoo object representing your time series. coredata(ta.z)
is the data and time(ta.z) are the dates.  See:

library(zoo)
vignette("zoo")

for more info.




On 10/6/05, Anette Nørgaard <anette at geoplus.dk> wrote:
> Can anybody help me write a code on the following data example, which
> fills out all NA values by using a linear interpolation with the two
> closest values?
>
> Doy is day of year (%j).
>
> Code example:
> yr<-c(rep(2000,14))
> doy<-c(16:29)
> dat<-c(3.2,NA,NA,NA,NA,NA,NA,5.1,NA,NA,NA,NA,NA,4.6)
> ta<-cbind(yr,doy,dat)
>
> ta
>      yr doy dat
>  [1,] 2000  16 3.2
>  [2,] 2000  17  NA
>  [3,] 2000  18  NA
>  [4,] 2000  19  NA
>  [5,] 2000  20  NA
>  [6,] 2000  21  NA
>  [7,] 2000  22  NA
>  [8,] 2000  23 5.1
>  [9,] 2000  24  NA
> [10,] 2000  25  NA
> [11,] 2000  26  NA
> [12,] 2000  27  NA
> [13,] 2000  28  NA
> [14,] 2000  29 4.6
>
> Anette Norgaard
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>




More information about the R-help mailing list