[R-SIG-Finance] interpolating missing values from a TS
Gabor Grothendieck
ggrothendieck at gmail.com
Wed Oct 7 15:55:02 CEST 2009
Try this (time series with values of 2, NA , etc. at indicated times
(1, 3, etc.) which has NAs removed by linear approx:
> library(zoo)
> z <- zoo(c(2,NA,1,4,5,2), c(1,3,4,6,7,8))
> na.approx(z)
1 3 4 6 7 8
2.000000 1.333333 1.000000 4.000000 5.000000 2.000000
zoo has otherl na.* routines too. They work the same way. You just
give them the series and the NAs are filled in as in the example
above.
na.approx - linear approximation to NAs
na.contiguous - only keep portion of series with no NAs
na.locf - fill NAs from last non-NA
na.omit - remove NAs
na.spline - spline approximation to NAs
na.trim - remove NAs at ends
And also in the stinepack package:
na.stinterp - use Stineman approxmation to remove NAs
See ?na.approx for a few more examples.
On Wed, Oct 7, 2009 at 5:23 AM, Aleks Clark <aleks.clark at gmail.com> wrote:
> I've got a large TS with occasional NAs I'd like to roughly
> interpolate, I'm currently doing this but it's pretty slow:
>
> lapply(1:nrow(delta), function(i) {
> lapply(1:ncol(delta), function(j) {
> if (is.na(delta[i,j])) {
> if ((i==1)||is.na(delta[i-1,j])) {
> delta[i,j] <- delta[i+1,j]
> } else { delta[i,j] <- delta[i-1,j]}
> }
> })
> })
>
> any ideas for a better solution?
>
>
> --
> Aleks Clark
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only.
> -- If you want to post, subscribe first.
>
More information about the R-SIG-Finance
mailing list