Count unique categorical values in table
28 ビュー (過去 30 日間)
古いコメントを表示
My table consist of only categorical values. I try to find unique elements and how many times do they appear in my table. Not my actual data but following can be used instead:
LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
FirstName = {'Amanda' ;'Brenda';'Carl'; 'Denis'; 'Ethan'};
Something = {'String1' ;'String2';'String2'; 'String1'; 'String5'};
Weight = [176;163;131;133;119];
FavoriteColor = {'blue' ;'red' ;'yellow'; 'orange' ;'colorblind' };
T = table(Age,FirstName,Weight,FavoriteColor,Something,'RowNames',LastName)
T.FavoriteColor= categorical(T.FavoriteColor);
T.Something= categorical(T.Something);
I think It is similar to the idea of applying a histogram function so I tried it as well but the data being categorical makes it hard. Could you help?
2 件のコメント
採用された回答
Mohammad Abouali
2014 年 10 月 25 日
something like this:
First your code to generate sample data:
LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
FirstName = {'Amanda' ;'Brenda';'Carl'; 'Denis'; 'Ethan'};
Something = {'String1' ;'String2';'String2'; 'String1'; 'String5'};
Weight = [176;163;131;133;119];
FavoriteColor = {'blue' ;'red' ;'yellow'; 'orange' ;'colorblind' };
T = table(Age,FirstName,Weight,FavoriteColor,Something,'RowNames',LastName)
T.FavoriteColor= categorical(T.FavoriteColor);
T.Something= categorical(T.Something);
now getting the unique values
unqValue=unique(T.Something);
Now counting
n=arrayfun(@(x) sum(T.Something==x),unqValue);
Now plotting
bar(n)
Now first changing the unqValue from categorical to Cell array and then adding it as labels to the bar chart
unqValueCell=arrayfun(@(x) char(x(1)),unqValue,'UniformOutput',false);
set(gca,'XTickLabel',unqValueCell)
Here is the bar chart:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/176337/image.png)
0 件のコメント
その他の回答 (2 件)
Image Analyst
2014 年 10 月 25 日
For some reason you chose to use the original poster's code which he said wasn't working rather than either of the two answers that worked. Why? Why not try to use one of the scripts that worked?
3 件のコメント
Image Analyst
2014 年 10 月 25 日
What he needed was the histogram. Both answers had that but his original code did not . You can use one of the Answers or try Azzi's code here.
Azzi Abdelmalek
2014 年 10 月 25 日
Look at this example
LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;40];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
tNonNumeric = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)
%---------------------------------------------------------------------------
a=tNonNumeric.Age
[uniq,jj,kk]=unique(a)
freq=histc(kk,1:numel(uniq))
out=[uniq freq]
7 件のコメント
Azzi Abdelmalek
2014 年 10 月 25 日
What is your question for the new example? what column? the first? or all the columns at the same time?
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!