they are in numeric array

# find the mean for each category and summarize it

16 views (last 30 days)

Show older comments

Hello,

i have a table which consists of the following data

Category value1 value2

1 20 33

3 23 43

2 50 32

4 13 32

4 30 15

3 33 23

1 60 12

2 24 43

i want to find the modulus mean value for each unique category and summarize them, e.g.

Category value1 value2

1 23.54 15.33

2 35.44 42.55

3 29.33 33.32

4 44.34 23.44

can anyone help me with this?

##### 3 Comments

Star Strider
on 4 Mar 2020

@Mohammad Aljarrah — How do you calculate those results?

The mean of category 1 for example are 40 and 22.5 for ‘value1’ and ‘value2’ respectively. How do you get 23.54 and 15.33?

### Accepted Answer

the cyclist
on 4 Mar 2020

Edited: the cyclist
on 4 Mar 2020

For a numeric array, you can use the accumarray function to do this. That function is a bit tricky to learn the power of, and is also not really set up for operating on a matrix of data. However, Sean de Wolski provided a nice solution here, which I borrow below.

I illustrate both below.

M = [1 20 33

3 23 43

2 50 32

4 13 32

4 30 15

3 33 23

1 60 12

2 24 43];

% On the original matrix

[~,~,c] = unique(M(:,1));

data = M(:,[2 3]);

sz = size(data);

meanByCategoryForMatrix = accumarray([repmat(c,sz(2),1), repelem((1:sz(2))',sz(1),1)],data(:),[],@mean)

% Or put them in a table first

Category = M(:,1);

value1 = M(:,2);

value2 = M(:,3);

tbl = table(Category,value1,value2);

meanByCategoryForTable = varfun(@mean,tbl,'GroupingVariables','Category','InputVariables',{'value1','value2'})

### More Answers (1)

Robert U
on 4 Mar 2020

Hi Mohammad Aljarrah,

the function that calculates the desired values can be exchanged according to your needs. I used the "mean" (within "arrayfun") to illustrate the solution to your described problem:

testData = [1, 20, 33

3, 23, 43

2, 50, 32

4, 13, 32

4, 30, 15

3, 33, 23

1, 60, 12

2, 24, 43 ];

catTestData = unique(testData(:,1));

outMean = [catTestData cell2mat(arrayfun(@(dIn) mean(testData(testData(:,1) == dIn,2:3),1),catTestData,'UniformOutput',false))];

Kind regards,

Robert

### See Also

### Community Treasure Hunt

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

Start Hunting!