Calcuating equally-spaced sums from unevenly-spaced time-series data

2 次查看(过去 30 天)
I need to create an equally-spaced vector of values which are the sums from a vector of unequally-spaced values.
More specifically, I have a file which has the number of bytes received and the time they were received. There are usually more than a million lines in the file. I want to plot the data rate every five minutes. To make things more difficult, the timestamps might not always be in order.
This is my code so far. I could write a loop to populate kbps, but is there an easier way to do it?
D = textscan( fid, '%f %d\n' );
datim = D{1}; % Posix timestamp
bytes = D{2}; % Number of bytes
t1 = dateshift(datetime(min(datim), 'ConvertFrom', 'posixtime'), 'start','day');
t2 = dateshift(datetime(max(datim), 'ConvertFrom', 'posixtime'), 'end','day');
t = t1:minutes(5):t2;
kbps = nan( size(t) );
And here are the variables:

采纳的回答

Cris LaPierre
Cris LaPierre 2022-8-4
编辑:Cris LaPierre 2022-8-5
I would put your datetime and bytes into a table (consider cell2table). Convert your times to datetime, and then use sortrows to place them in order (if desired).
With the data in a table, you can use groupsummary to compute the number of datapoints in bins you specify, where groupbins is the bin edges.
You could use the data you already have captured in t for your edges:
Consider sharing your data and we can test actual code. You can attach it using the paperclip icon.
  4 个评论
dormant
dormant 2022-8-5
Here is my working code. Many, many, many thanks.
D = readtable( fileSniff );
D = sortrows(D,1);
D.Var1 = datetime( D.Var1, 'ConvertFrom', 'posixtime' );
tBeg = dateshift(D.Var1(1), 'start', 'hour');
tEnd = dateshift(D.Var1(end), 'end', 'hour');
T = tBeg:minutes(5):tEnd;
G = groupsummary(D,'Var1',T,'sum');

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

标签

产品


版本

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by