Cumulative sum of groups

4 views (last 30 days)
PGrant
PGrant on 25 Apr 2018
Commented: PGrant on 25 Apr 2018
I need the cumlative sum of the second column of Data grouped by (or reset at each change in) the first column of Data please:
Data = [[1;1;1; 2;2;2; 3;3;3], [1;0;1; 0;1;1; 0;1;0]]
Answer = [Data, [1;1;2; 0;1;2; 0;1;1]]
Data =
1 1
1 0
1 1
2 0
2 1
2 1
3 0
3 1
3 0
Answer =
1 1 1
1 0 1
1 1 2
2 0 0
2 1 1
2 1 2
3 0 0
3 1 1
3 0 1
  2 Comments
Stephen23
Stephen23 on 25 Apr 2018
Edited: Stephen23 on 25 Apr 2018

@PGrant: please explain the logic of how to calculate Answer: assume that we a stupid and that every step need to be shown to us.

PGrant
PGrant on 25 Apr 2018
Like a normal cumsum on column 2 of the Data with the difference being that it needs to restart for every change in column 1 of data resulting in column 3 of Answer. Columns 1 & 2 of Answer are just Data...

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 25 Apr 2018
Edited: Stephen23 on 25 Apr 2018
>> data = [1,1;1,0;1,1;2,0;2,1;2,1;3,0;3,1;3,0];
>> C = accumarray(data(:,1),data(:,2),[],@(v){cumsum(v)});
>> [data,vertcat(C{:})]
ans =
1 1 1
1 0 1
1 1 2
2 0 0
2 1 1
2 1 2
3 0 0
3 1 1
3 0 1
  1 Comment
PGrant
PGrant on 25 Apr 2018
Thanks so much Stephen. Greatly appreciated!

Sign in to comment.

More Answers (0)

Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!