MATLAB Answers

Insert new rows of NaN for missing timestamps in time series.

31 views (last 30 days)
Hello, I have a time series that is missing some data. In the places where there is a data gap I would like to insert rows of NaN values at the same incremetal time step. The data is organized by a datenum.
Here is the current script I'm using to get the timeseries.
Thanks!
% Read the data.
[num, txt, raw] = xlsread('SFL_2018.xlsx'); % Creates three variables. A number (double), raw (cell), and txt (cell).
% Note that the 'txt' and 'raw' variables contain the decriptions of the columns.
% Rename the numerical matrix and remove the upper 4 rows that originally contained the data headers.
SFL2018 = num(5:end, :);
% Change the first column (excel datenum value) to MATLAB datenum value.
datevec = datetime(SFL2018(:,1),'ConvertFrom','excel');
date_num = datenum(datevec);
SFL2018 = [date_num SFL2018(:, 2:end)];
% Rename the 'txt' cell to 'header' and clear unused variables.
header = txt(1:4,:);
clearvars('num', 'txt', 'raw', 'date_num');

  0 Comments

Sign in to comment.

Accepted Answer

Peter Perkins
Peter Perkins on 7 Feb 2019
retime "adjusts" your data to a new set of row times. In general, "adjust" means things like interpolate, or aggregate, or take the neaest value, but by default it fiills with missing values. So
>> tt = timetable([1;2;5;6],'RowTimes',datetime(2019,2,[1;2;5;6]))
tt =
4×1 timetable
Time Var1
___________ ____
01-Feb-2019 1
02-Feb-2019 2
05-Feb-2019 5
06-Feb-2019 6
>> retime(tt,datetime(2019,2,1:6))
ans =
6×1 timetable
Time Var1
___________ ____
01-Feb-2019 1
02-Feb-2019 2
03-Feb-2019 NaN
04-Feb-2019 NaN
05-Feb-2019 5
06-Feb-2019 6
Or in this simple case
>> retime(tt,'daily')
ans =
6×1 timetable
Time Var1
___________ ____
01-Feb-2019 1
02-Feb-2019 2
03-Feb-2019 NaN
04-Feb-2019 NaN
05-Feb-2019 5
06-Feb-2019 6

  0 Comments

Sign in to comment.

More Answers (1)

Peter Perkins
Peter Perkins on 31 Jan 2019
I recommend you use a timetable. Read your data in using readtable, then use table2timetable. The retime function makes what you want one line.

  1 Comment

Eric Escoto
Eric Escoto on 1 Feb 2019
Thanks, Peter
This method doesn't seem to create new rows and insert them into the SFL2018 array, creating a new array. If it does, I don't quite get how that would happen. Could you provide an example?
-Eric

Sign in to comment.


Translated by