I have a huge cell array. Column 1 has duplicate material numbers. Column 3, 4 contains numbers that I want to add. Column 2 contain either texts or alphanumerals which I just want to retain.
'Material Number' 'Material Description' 'Quantity withdrawn' 'Value Withdrawn'
107552 Material A 5 $40
18042 Material 5B 1 $90
107552 Material A 1 $8
Desired Output:
'Material Number' 'Material Description' 'Quantity withdrawn' 'Value Withdrawn'
107552 Material A 6 $48
18042 Material 5B 1 $90
I'm not sure how to do this in case of celltype. I tried with just number (double) and it worked.

 Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 16 Mai 2020

0 Stimmen

Try this example
C = {107552, 'Material A', 5, 40; ...
18042, 'Material 5B', 1, 90; ...
107552, 'Material A', 1, 8};
ids = [C{:,1}].';
result = splitapply(@(x) {[x(1,1:2) sum([x{:,3}]) sum([x{:,4}])]}, C, findgroups(ids));
result = vertcat(result{:});
Result
>> result
result =
2×4 cell array
{[ 18042]} {'Material 5B'} {[1]} {[90]}
{[107552]} {'Material A' } {[6]} {[48]}

2 Kommentare

Thanks a lot. It works. I just need to study more about splitapply to use to elsewhere.
Ameer Hamza
Ameer Hamza am 16 Mai 2020
I am glad to be of help!
Yes, splitapply can be a very useful tool if applied correctly.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by