MATLAB Answers

How to get statistical summary

3 views (last 30 days)
Mekala balaji
Mekala balaji on 16 Oct 2018
Edited: Guillaume on 16 Oct 2018
Hi,
I have below cell array,
Step 34
Step 56
Double 23
Stop 123
I want to get the summation and count of each category:
Desired output:
Step 90 2
Double 23 1
Stop 123 1
Continue 0 0
Here in the above example, no continue, but in some of my cases it exists. So for each scenario, I want to get the summation & count of: Step Double Stop Continue

  0 Comments

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 16 Oct 2018
The way I'd do this is first convert your cell array to a table whose first column is of type categorical:
democell = {'Step', 34; 'Double', 56; 'Step', 23; 'Stop', 123}
demotable = table(categorical(democell(:, 1), {'Step', 'Double', 'Stop', 'Continue'}), cell2mat(democell(:, 2)), 'VariableNames', {'category', 'value'})
Your summation is then trivial:
varfun(@sum, demotable, 'GroupingVariables', 'category', 'InputVariables', 'value')

  2 Comments

Mekala balaji
Mekala balaji on 16 Oct 2018
Output is still:
Step 2 57
Double 1 56
Stop 1 123
But I still need Continue sum is 0, count is 0.
Guillaume
Guillaume on 16 Oct 2018
Then, you'd have to use more or less Kevin's answer. I'd still stuff the input into a table and change the first column to categorical as it's easier to work with. I'd do the calculation like this:
catnames = categories(demotable.category)
[~, id] = ismember(demotable.category, catnames);
result = table(catnames, accumarray(id, 1, [numel(catnames), 1]), accumarray(id, demotable.value, [numel(catnames), 1]), 'VariableNames', {'category', 'count', 'sum'})

Sign in to comment.

More Answers (1)

Kevin Chng
Kevin Chng on 16 Oct 2018
Edited: Kevin Chng on 16 Oct 2018
A = ["Step" "Step" "Double" "Stop" "Continue"];
B = [ 34 56 23 123 0]
[c,~,d] = unique(A);
out = [c',accumarray(d,B),countcats(categorical(A))']

  2 Comments

Mekala balaji
Mekala balaji on 16 Oct 2018
I am getting below output, but it giving continue sum is 1, count 0. In fact the Continue should have 0 &0
Continue 0 1
Double 23 1
Step 90 2
Stop 123 1
Kevin Chng
Kevin Chng on 16 Oct 2018
change to
out = table(c',accumarray(d,B),[zeros(numel(A(B==0)))';countcats(categorical(A(B>0)))'])

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by