# finding the frequency of a series of numbers in an array

160 ビュー (過去 30 日間)
Joe 2015 年 6 月 3 日
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

サインインしてコメントする。

### 採用された回答

Guillaume 2015 年 6 月 4 日

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
##### 1 件のコメント表示非表示 なし
Joe 2015 年 6 月 4 日
I've combined the answeres into one use with a threshold
data=[1,1,1,2,2,2,3,6,3,3,10,3,10];
threshold=1;
transpos = find(diff(data));
transpos1=[transpos, transpos(end)+1];
transvals = data(transpos1);
transvals(diff([0 transpos1 numel(data)+1])<threshold)=[0];
for k=1:1:10
frequency(k)=length(find(transvals==k));
end
Thanks for all the help!

サインインしてコメントする。

### その他の回答 (4 件)

Jan 2015 年 6 月 4 日
[value, len] = RunLength(data);
bin = min(value):max(value);
h = histc(value(len > 2), bin);
result = [bin.', h.']
##### 0 件のコメント表示非表示 -1 件の古いコメント

サインインしてコメントする。

Azzi Abdelmalek 2015 年 6 月 3 日

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 件のコメント表示非表示 1 件の古いコメント
Azzi Abdelmalek 2015 年 6 月 4 日
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 2018 年 10 月 24 日
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 件のコメント表示非表示 -1 件の古いコメント

サインインしてコメントする。

Manoel Rodrigues Trigueiro 2019 年 3 月 30 日
% 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

サインインしてコメントする。

### カテゴリ

Find more on Loops and Conditional Statements 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!

Translated by