Cumulative sum with condition

3 vues (au cours des 30 derniers jours)
Ravi Kumar
Ravi Kumar le 22 Oct 2021
Modifié(e) : Dave B le 22 Oct 2021
I want to do cumulative sum of column 3/4 with condition in coulmn 5/6 .
example:
i.e. -0.0700+0
than -0.9800 + (-0.9800+0.4950) + (-0.9800+0.4950+0.1680)+.....so on till 0.2070
than it should start summing 3: 3.3590 + (3.3590 + 1.7470) + .....

Réponse acceptée

Dave B
Dave B le 22 Oct 2021
Modifié(e) : Dave B le 22 Oct 2021
I think what you're looking for is groupsummary (or grouptransform):
x=[rand(10,1) randi(3,10,1)];
% this is the sum for groups 1,2,3
[groupsums,groups] = groupsummary(x(:,1),x(:,2),'sum')
groupsums = 3×1
0.7349 2.6445 1.5777
groups = 3×1
1 2 3
% this is what you described, the sum of the cumulative sum
[groupsums,groups]=groupsummary(x(:,1),x(:,2),@(x)sum(cumsum(x)))
groupsums = 3×1
0.8584 9.7034 2.2265
groups = 3×1
1 2 3
% here's just the cumsum:
x=sortrows(x,2); % sorting is not necessary, just makes it easier to visualize
groupcumsums=grouptransform(x(:,1),x(:,2),@(x)cumsum(x));
[x groupcumsums]
ans = 10×3
0.1235 1.0000 0.1235 0.6113 1.0000 0.7349 0.0059 2.0000 0.0059 0.8389 2.0000 0.8448 0.7340 2.0000 1.5788 0.5824 2.0000 2.1612 0.3069 2.0000 2.4682 0.1764 2.0000 2.6445 0.6488 3.0000 0.6488 0.9288 3.0000 1.5777

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by