# create cell array of individual years from a long time series

3 views (last 30 days)
Richard on 6 Sep 2012
I have a matrix which is composed of a mixture of datevec and time series of measurements, e.g.
time = datevec(datenum('1966-01-01'):datenum('2009-12-03'));
data = rand(size(time,1),1);
Final = [time,data];
a = cell(length(unique(time(:,1))),1);
I would like to place all individual years in separate cells, I have created an empty cell array to house the values but am unsure about the most efficient way of moving the values from 'Final' to 'a'.
So far I have:
b = unique(Final(:,1));
for i = 1:length(a);
a{i} = Final(find(Final(:,1)==b(i)),:);
end
This works fine but I was wondering if anyone had an alternative method?

Andrei Bobrov on 6 Sep 2012
Edited: Andrei Bobrov on 6 Sep 2012
try this is code (corrected)
time = datevec(datenum('1966-01-01'):datenum('2009-12-03'));
data = rand(size(time,1),1);
Final = [time,data];
[c c c] = unique(Final(:,1));
a2 = accumarray(c,Final(:,end),[],@(x){x});
##### 2 CommentsShowHide 1 older comment
Andrei Bobrov on 6 Sep 2012
corrected

### Categories

Find more on Cell Arrays in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by