finding the frequency of a series of numbers in an array
    32 views (last 30 days)
  
       Show older comments
    
    Joe
 on 3 Jun 2015
  
    
    
    
    
    Answered: Manoel Rodrigues Trigueiro
 on 30 Mar 2019
            given the data set
data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,6,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1];
I want to find the number of occurrences (frequency) of each series of numbers in the array. For example, I know there are eleven places that 1 occurs.
k=1
location=find(data==k)
location = 1 2 3 22 23 24 25 28 29 30 35
But I want the frequency (number of series that occur in the data set for a given value in the array. Also, I want to exclude series of data in the frequency count if they fall below a threshold value (arbitrarily a value of 2 in this case). The output for the one value should be freq=3
I want the output to be a 10x2 array with the frequency of each number value 1 through 10 to be sorted in order
seriesfreq=
1     3
2     2
3     1
4     1
5     1
6     0
7     0
8     0
9     1
10    1
Please help!
0 Comments
Accepted Answer
  Guillaume
      
      
 on 4 Jun 2015
        
      Edited: Guillaume
      
      
 on 4 Jun 2015
  
      A method with no loop:
data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1];
threshold = 2;
transpos = find(diff(data)); %gives the position of the end of each series of identical number
transvals = data(transpos);  %gives the corresponding value of each series
transvals(diff([0 transpos numel(data)+1]) < threshold) = []; %remove values for which the run is shorter than threshold
bins = min(data):max(data)';
[bins; histcounts(transvals, [bins Inf])]' %get the histogram of the runs
More Answers (4)
  Jan
      
      
 on 4 Jun 2015
        [value, len] = RunLength(data);
bin          = min(value):max(value);
h            = histc(value(len > 2), bin);
result       = [bin.', h.']
0 Comments
  Azzi Abdelmalek
      
      
 on 3 Jun 2015
        
      Edited: Azzi Abdelmalek
      
      
 on 3 Jun 2015
  
      data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,6,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1];
ii=unique(data);
for k=1:numel(ii)
  a=data==ii(k);
  b=[0 a 0];
  out(k)=sum(strfind(b,[1 0])-strfind(b,[0 1])>=2);
end
out
2 Comments
  Azzi Abdelmalek
      
      
 on 4 Jun 2015
				data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,6,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1];
ii=min(data):max(data);
for k=1:numel(ii)
a=data==ii(k);
b=[0 a 0];
out(k)=sum(strfind(b,[1 0])-strfind(b,[0 1])>=2);
end
out
  Suvidha Tripathi
 on 24 Oct 2018
        data=[1,1,1,2,2,3,3,3,4,4,3,3,5,5,5,7,8,9,9,9,1,1,1,1,10,10,1,1,1,2,2,2,2,1]
unique_data=unique(data);
disp("series_no "+"frequency")
for i=1:length(unique_data)
    [~,indices]=find(data==unique_data(i));
    freq(i)=length(indices);
    disp(unique_data(i)+" "+freq(i))
end
0 Comments
  Manoel Rodrigues Trigueiro
 on 30 Mar 2019
        % Frequency order function %
function f = freq(X)
a = unique(X); len_X = length(a);
for i=1:len_X
    f(i) = mode(X);
    ind = find(mode(X)==X);
    for j=1:length(ind)
        X(ind(j)) = NaN;
    end
end
end
0 Comments
See Also
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!



