find the mean for each category and summarize it
31 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
the cyclist
2020 年 3 月 4 日
Sorry I deleted my question that you answered here! I decided to just illustrate solutions for both a numeric array and a table.
Star Strider
2020 年 3 月 4 日
@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?
採用された回答
the cyclist
2020 年 3 月 4 日
編集済み: the cyclist
2020 年 3 月 4 日
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'})
その他の回答 (1 件)
Robert U
2020 年 3 月 4 日
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
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!