MATLAB Answers

how to count number of repeating's in data series.

19 views (last 30 days)
shashika iresh
shashika iresh on 3 Oct 2016
Commented: Sylwia Kaduk on 21 May 2020
for example my matrix A=[22 24 24 36 36 36 48 48 48 48 24 33 22 22]; i need to count how many twos, threes, four time repeating's etc

  0 Comments

Sign in to comment.

Answers (4)

Massimo Zanetti
Massimo Zanetti on 3 Oct 2016
Edited: Massimo Zanetti on 3 Oct 2016
This code
A = [22 24 24 36 36 36 48 48 48 48 24 33 22 22]';
C = accumarray(A,1);
I = unique(A);
counts = [I,C(I)]
returns
out = 22 3
24 3
33 1
36 3
48 4

  1 Comment

shashika iresh
shashika iresh on 3 Oct 2016
no dear, i need to find the repeating(double, triple, four time, etc of same number. for a example above matrix 2 doubles(24 24,22 22),and only 1 triple(36 36 36) ,and only one four times(48 48 48 48). li

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 4 Oct 2016
Edited: Andrei Bobrov on 4 Oct 2016
A=[22 24 24 36 36 36 48 48 48 48 24 33 22 22];
V = A(:);
[~,~,c] = unique(V);
t = diff([0;c])~= 0;
ix = cumsum(t);
out = [V(t),accumarray(ix(:),1)];
out2 = [num2cell((1:max(out(:,2)))'),...
accumarray(out(:,2),out(:,1),[],@(x){sort(x(:)')})];

  3 Comments

Sylwia Kaduk
Sylwia Kaduk on 21 May 2020
Dear Andrei, 4 years later your code is very helpful in part of my PhD. Thanks a lot.

Sign in to comment.


Adrian Stannard
Adrian Stannard on 3 Oct 2016
Edited: Adrian Stannard on 4 Oct 2016
I think I understand what you want - it is the successive re-occurrences of a number.
Array=[22 24 24 36 36 36 48 48 48 48 24 33 22 22];
Array(find(diff(Array)==0))
This returns only the repeated elements from the Array after the first occurrence.
You could go further, for example use:
counts=hist(Array(find(diff(Array)==0)))
This gives you the how many times they are repeated. Alternatively:
Array2 = Array(find(diff(Array)==0));
Array3= zeros (size(Array2));
for i = 1:length(Array2)
Array3(i) = sum(Array2==Array2(i));
end
Array3=Array3+1
Array2=Array2([1,diff(Array2)]~=0);
Array3=Array3([1,diff(Array3)]~=0);
will return:
24 36 48 22
2 3 4 2

  5 Comments

Show 2 older comments
Adrian Stannard
Adrian Stannard on 4 Oct 2016
The final two lines I gave should strip out the repeated occurrences:
Array2=Array2([1,diff(Array2)]~=0);
Array3=Array3([1,diff(Array3)]~=0);
This code should work for any number of repetitions:
Array=[22 24 24 36 36 36 48 48 48 48 48 48 48 24 33 22 22 22 22 22 22 22 22 22 22];
Array2 = 24 36 48 22
Array3 = 2 3 7 10
Guillaume
Guillaume on 4 Oct 2016
@Adrian,
Please use the {}Code format button for the code (or just put two spaces before each line) instead of putting blank lines between each line of code.
edit: Thanks!
shashika iresh
shashika iresh on 5 Oct 2016
please check for this it give wrong answer. A =[24 24 24 24 36 36 36 48 48 48 48 48 48 48 28 24 24 22 22 22 22 22 22 22 22 22 22]; Array2 =
24 36 48 24 22
Array3 =
5 3 7 5 10

Sign in to comment.


Thorsten
Thorsten on 4 Oct 2016
Edited: Thorsten on 4 Oct 2016
N(i) is the the number of occurrences of series of i numbers in A:
N = zeros(numel(A), 1);
i = 1;
while(i) < numel(A)
Ni = 1; val = A(i);
while i < numel(A) && A(i+1) == A(i)
i = i + 1; Ni = Ni + 1;
end,
N(Ni) = N(Ni) + 1;
i = i + 1;

  0 Comments

Sign in to comment.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by