Binning of data except from histcounts?
Show older comments
I am a matlab R2014b user. Using histcounts for binning a dataset is not giving me the exact result. Is there any alternative for this ?
A = [0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1];
N = histcounts(X,6)
>>N =
6 0 2 0 0 2
This what I am getting every time.
A = [0 0 1 1 1 0 0 0 0 NaN NaN 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1];
C = categorical(A,[1 0 NaN],{'yes','no','undecided'})
[N,Categories] = histcounts(C)
And for the above I am getting this error.
Error using histcounts Expected input number 1, x, to be one of these types:
numeric
Instead its type was categorical.
Error in histcounts (line 96) validateattributes(x,{'numeric'},{'real'}, mfilename, 'x', 1)
Accepted Answer
More Answers (2)
Walter Roberson
on 9 Oct 2018
0 votes
histcounts did not support categorical back then.
Use the second output of ismember to get the bin number, which you can then histc or histcounts or accumarray (most efficient)
4 Comments
Zara Khan
on 9 Oct 2018
Walter Roberson
on 9 Oct 2018
[~, idx] = ismember(A, [1 0 nan]);
N = accumarray(idx(:), 1);
Zara Khan
on 9 Oct 2018
Walter Roberson
on 9 Oct 2018
Interesting, I did not realize that ismember would not handle nan. It does make a kind of sense, in that nan have the oddity that
nan == nan
is false.
Bruno Luong
on 9 Oct 2018
A = [0 0 1 1 1 0 0 0 0 NaN NaN 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1];
[U,~,J] = unique(A);
inan = find(isnan(U),1,'first');
if inan
U=U(1:inan);
J=min(J,inan);
end
counts = accumarray(J(:), 1);
[U(:),counts]
ans =
0 14
1 11
NaN 2
4 Comments
Zara Khan
on 9 Oct 2018
Bruno Luong
on 9 Oct 2018
Edited: Bruno Luong
on 9 Oct 2018
The output is
- 0 appears 14 times
- 1 appears 11 times
- Nan appears 2 timesin A
Plot the bar with it you'll get your "histogram".
The same code works with or without NaN. I can't see any bins in your question, and with an example with 0,1,NaN hard to see what kind of bins (beside [0,1,NaN]) is meaningful for you.
Zara Khan
on 9 Oct 2018
Bruno Luong
on 9 Oct 2018
Sorry but this is not binning, binning means all the 1s fall at the same place: at the position 1.
If you use the wrong wording you should expect get the wrong answer.
Categories
Find more on Data Type Conversion in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!