finding the frequency of a series of numbers in an array
    29 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Joe
 am 3 Jun. 2015
  
    
    
    
    
    Beantwortet: Manoel Rodrigues Trigueiro
 am 30 Mär. 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 Kommentare
Akzeptierte Antwort
  Guillaume
      
      
 am 4 Jun. 2015
        
      Bearbeitet: Guillaume
      
      
 am 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
Weitere Antworten (4)
  Jan
      
      
 am 4 Jun. 2015
        [value, len] = RunLength(data);
bin          = min(value):max(value);
h            = histc(value(len > 2), bin);
result       = [bin.', h.']
0 Kommentare
  Azzi Abdelmalek
      
      
 am 3 Jun. 2015
        
      Bearbeitet: Azzi Abdelmalek
      
      
 am 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 Kommentare
  Azzi Abdelmalek
      
      
 am 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
 am 24 Okt. 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 Kommentare
  Manoel Rodrigues Trigueiro
 am 30 Mär. 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 Kommentare
Siehe auch
Kategorien
				Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!