time - MATLAB: Sum rows into events per minute -
in matlab (r2015b) have cell data large time-series:
'01-jan-2017 09:01:48' [ 5] '01-jan-2017 09:01:50' [ 2] '01-jan-2017 09:01:51' [12] '01-jan-2017 09:01:53' [ 2] '01-jan-2017 09:01:56' [ 1] '01-jan-2017 09:02:00' [ 1] '01-jan-2017 09:02:01' [ 2] '01-jan-2017 09:02:12' [ 1] '01-jan-2017 09:02:17' [ 2] '01-jan-2017 09:02:19' [ 1] '01-jan-2017 09:02:21' [ 4] '01-jan-2017 09:02:52' [ 1] '01-jan-2017 09:03:00' [ 1] '01-jan-2017 09:03:05' [ 3] '01-jan-2017 09:03:23' [ 2] '01-jan-2017 09:03:26' [ 3] '01-jan-2017 09:03:36' [ 3] '01-jan-2017 09:03:37' [ 2] '01-jan-2017 09:03:38' [ 1] '01-jan-2017 09:03:43' [ 2] '01-jan-2017 09:03:49' [ 2] '01-jan-2017 09:03:51' [ 1] '01-jan-2017 09:03:55' [ 1]
however, sum rows events per minute (instead of per second), i.e.
'01-jan-2017 09:01:00' [ 22] '01-jan-2017 09:02:00' [ 12] '01-jan-2017 09:03:00' [ 21]
how can time-series?
you can use discretize
combined accumarray
sum values occured in same minute. first have convert first column of date strings datetime
objects , perform summation of second column convert numeric array using [data{:,2}]
% convert first column datetime objects , discretize minute [inds, edges] = discretize(datetime(data(:,1)), 'minute'); % sum values same minute sums = accumarray(inds, [data{:,2}]); % create output cell array of date strings , sums result = [cellstr(datestr(edges(1:end-1))), num2cell(sums)]; % '01-jan-2017 09:01:00' [22] % '01-jan-2017 09:02:00' [12] % '01-jan-2017 09:03:00' [21]
update
so doesn't discretize
works datetime
objects in r2015b, following break dates components, remove seconds, determine unique groups , again use accumarray
perfom summation
% break each date it's components dv = datevec(data(:,1)); % set seconds 0 minutes considered dv(:,end) = 0; % find unique minutes [vals, ~, inds] = unique(dv, 'rows'); % sum value each unique minute sums = accumarray(inds, [data{:,2}]); % create output cell array result = [cellstr(datestr(vals)), num2cell(sums)];
Comments
Post a Comment