MATLAB Answers


Determining which values are found in all columns of an array

Asked by mashtine on 25 Feb 2014
Latest activity Commented on by Jos (10584)
on 25 Feb 2014
I have data in an array (1x35) each col have multiple rows of varying number. I would like to go through each of the 35 cols in the array and see which values occur throughout all or at least 30. Any idea how I would do this?


This means you have a cell array of size 1-by-35, where each cell holds a column vector (1 column) with a varying number of elements?
Correct. Sorry for the semantics.

Sign in to comment.

1 Answer

Answer by Jos (10584)
on 25 Feb 2014
 Accepted Answer

Assuming you matrix is a cell array:
% create some example data
CVFun = @(n) ceil(10*rand(n,1)) ; % helper function to create some data
C = {CVFun(10) CVFun(4) CVFun(7) CVFun(9) CVFun(10) CVFun(12)} % a 1-by-6 cell array
% engine
unVal = unique(cat(1,C{:})) ; % get all unique values in C
isPresent = cellfun(@(x) ismember(unVal,x),C,'un',0)
isPresent = cat(2,isPresent{:}) ;
Count = sum(isPresent,2) % count in how many columns a unique value is found
[MaxCount, idx] = max(Count)
[unVal(idx) MaxCount] % the (most likely) result


Show 1 older comment
the value 2 occurs indeed in 5 columns. There might be other numbers that occur in 5 columns, though, but there are no numbers that occur in more than 5 columns. To get all these values, use this after the […]=max(…) statement
tf = Count == MaxCount
[unVal(tf) Count(tf)]
Is there any use of "histc()" function?
in what sense? You can use histc to count how many times elements occur
A = [1 3 5 2 4 3 4 4 1 6 7 5 6]
unA = unique(A)
N = histc(A,unA)

Sign in to comment.