MATLAB Answers

0

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
Hello,
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?
Thanks!

  2 Comments

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

  4 Comments

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.