How to add values in matrix if in a conditions is met?

13 views (last 30 days)
Hey everybody,
I'm processing some data and i'm stuck at the moment. I have a matrix consisting of 2 columns and about 4000 rows. A simplified example is given below:
data = 0 1.5
0.2 0.3
0.4 4
0.6 0.2
0.8 0.9
1 1.5
0 2
0.2 1.2
0.4 0.8
0.6 2.3
0.8 4.5
1 1.3
And what I need is that when values in column 1 are the same, then values of the second column are added to get one answer for one value in column 1. For the data above this would give:
For 0: 1.5 + 2 = 3.5
0.2: 0.3 + 1.2 = 1.5
0.4: 4 + 0.8 = 4.8
etc.
Could anyone help me with how to do this? Cause at the moment, I really don't know how. I tried a if loop but it didn't work.

Accepted Answer

dpb
dpb on 8 Dec 2020
Edited: dpb on 8 Dec 2020
>> accumarray(findgroups(data(:,1)),data(:,2))
ans =
3.5000
1.5000
4.8000
2.5000
5.4000
2.8000
>>
or, more completely
>> [ig,g]=findgroups(data(:,1));
>> [g accumarray(ig,data(:,2))]
ans =
0 3.5000
0.2000 1.5000
0.4000 4.8000
0.6000 2.5000
0.8000 5.4000
1.0000 2.8000
>>

More Answers (1)

Zezheng Wu
Zezheng Wu on 8 Dec 2020
splitapply(@(x) [x(1, 1), sum(x(:, 2))], data, findgroups(data(:, 1)));
  2 Comments
Danny Helwegen
Danny Helwegen on 8 Dec 2020
Thanks for the reply, if I run this I get als negative values whilst I don't have them in my data set. Any idea how I can solve that?
Zezheng Wu
Zezheng Wu on 8 Dec 2020
This piece of code works just fine with your example data:
data = [0 1.5;
0.2 0.3;
0.4 4 ;
0.6 0.2;
0.8 0.9 ;
1 1.5;
0 2;
0.2 1.2;
0.4 0.8;
0.6 2.3;
0.8 4.5;
1 1.3];
splitapply(@(x) [x(1, 1), sum(x(:, 2))], data, findgroups(data(:, 1)))
ans =
0 3.5000
0.2000 1.5000
0.4000 4.8000
0.6000 2.5000
0.8000 5.4000
1.0000 2.8000
I'm not sure how can there be negative values.

Sign in to comment.

Categories

Find more on Creating and Concatenating Matrices 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!