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

10 Ansichten (letzte 30 Tage)
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');

Akzeptierte Antwort

Peter Perkins
Peter Perkins am 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

Weitere Antworten (1)

Peter Perkins
Peter Perkins am 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 Kommentar
Eric Escoto
Eric Escoto am 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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Time Series finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by