`repnan` documentation

This function replaces `NaN` values in a 1D array by replacing them with interpolated or neighboring values. Interpolation schemes assume data are evenly spaced. This function does not extrapolate.

## Contents

## Syntax

x = repnan(x); x = repnan(x,method);

## Description

`x = repnan(x)` returns `x` sans NaNs.

`x = repnan(x,method)` specifies a method for replacing the original `x`'s NaNs. Methods can be

`'linear'`(default) performs linear interpolation over missing values in`x`,`'nearest'`performs nearest-neighbor interpolation,`'spline'`performs spline interpolation using not-a-knot end conditions,`'pchip'`is shape-preserving piecewise cubic interpolation,`'cubic'`same as`'pchip'`,`'v5cubic'`cubic convolution via Matlab v5 algorithm`'next'`replaces`NaN`values in`x`with the next non-NaN value in`x`,`'previous'`replaces`NaN`values in`x`with the previous non-NaN value in`x`,

## Examples

You measured some data in the lab, but the ground connection on your sensor's cable was spotty, so you've got some missing data entries. Here's the data you have:

t = 1:.5:10; x = round(10*sin(t)); x([3 7 8 9 16:18]) = NaN plot(t,x,'o-','linewidth',2,'color',[0.8039 0.6902 0.3294]) box off axis([0 10 -10 10.5]) xlabel('time (s)') ylabel('signal amplitude (V)') text(0,0,' measured data','color',[0.8039 0.6902 0.3294],'fontweight','bold') hold on

x = Columns 1 through 13 8 10 NaN 6 1 -4 NaN NaN NaN -7 -3 2 7 Columns 14 through 19 9 10 NaN NaN NaN -5

There are a number of ways to take care of those `NaN` values. One of the simplest workarounds is to linearly interpolate between valid `x` values. If no interpolation method is specified, `repnan` interpolates linearly:

xlin = repnan(x); plot(t,xlin,'-','color',[0.6902 0.4039 0.7569]) text(0,-1,' linear interpolation','color',[0.6902 0.4039 0.7569])

Cubic interpolation might be a better choice for this application:

xcubic = repnan(x,'pchip'); plot(t,xcubic,'-','color',[0.5922 0.7333 0.7490]) text(0,-2,' cubic interpolation','color',[0.5922 0.7333 0.7490])

Or better yet, spline:

xspline = repnan(x,'spline'); plot(t,xspline,'color',[0.7529 0.3216 0.2863]) text(0,-3, ' spline interpolation','color',[0.7529 0.3216 0.2863])

For some applications, you might want the nearest neighbor:

xnear = repnan(x,'nearest'); plot(t,xnear,'color',[0.3765 0.2588 0.3725]) text(0,-4, ' nearest neighbor','color',[0.3765 0.2588 0.3725])

Sometimes you may want to replace missing data with the most recent or previous valid value in `x`:

xprev = repnan(x,'previous'); plot(t,xprev,'color',[0.3373 0.3804 0.2353]) text(0,-5,' previous neighbor','color',[0.3373 0.3804 0.2353])

And other times you may want to replace missing data with the next valid value in `x`:

xnext = repnan(x,'next'); plot(t,xnext,'color',[0.4941 0.8078 0.3686]) text(0,-6,' next neighbor','color',[0.4941 0.8078 0.3686])

## Author Info

Written by Chad A. Greene of the University of Texas Institute for Geophysics (UTIG), October 31, 2014.