How to find number of values which are repeating in a column?

6 visualizaciones (últimos 30 días)
Yasir Ali
Yasir Ali el 16 de Feb. de 2017
Comentada: Walter Roberson el 28 de Dic. de 2017
Hi, I have matrix of 4535 x 23. In first column I have id's which are repeating. I would like to know that how many times a specific id is repeating in first column of matrix. For example: visually I can see 75 is repeating 3 three times so I want output in a matrix which should be like matrix having first column as id and second column corresponding number repetition of values. (like: 75, 3). I tried histogram but unable to receive required information. Could you please help in wiring script?

Respuestas (1)

Peter O
Peter O el 16 de Feb. de 2017
Take a look at the histcounts function: [N,edges] = histcounts(X,edges) sorts X into bins with the bin edges specified by the vector, edges. The value X(i) is in the kth bin if edges(k) ≤ X(i) < edges(k+1). The last bin also includes the right bin edge, so that it contains X(i) if edges(end-1) ≤ X(i) ≤ edges(end).
So then:
X = A(:,1);
Vals = unique(X); % Already sorted for you!
[N, HighEdge] = histcounts(X, [Vals+0.5]);
Assuming your IDs are all integers this spits them into the bin underneath. Alternatively you can do something like
Edges = [(min(Vals)-1):1:max(Vals)] + 0.5;
to get counts for each ID.
  3 comentarios
Peter O
Peter O el 16 de Feb. de 2017
Yes, looking back that solution was a little hasty. Sorry about that. Try this instead. Again, it's assuming your input is all integers.
Vals = unique(X);
V2 = [Vals(1)-0.5, Vals+0.5];
N = histcounts(X,V2);
C = [Vals' N'];
C will have the ID's in columm #1 and the repeat counts in Column #2.
Here's a test case input:
X = [233 11 18 91 01 91 18 17 10002 -43];
and expected output:
C =
-43 1
1 1
11 1
17 1
18 2
91 2
233 1
10002 1
Peter O
Peter O el 16 de Feb. de 2017
And for completeness, you can also use unique by itself, in a two-liner. This variant handles cases where you're looking for total counts and your input doesn't have to be stricly integer. IMO, it's the more elegant way:
[Vals,~,ic] = unique(X);
N = arrayfun(@(x) sum(ic==x),1:max(ic));
C = [Vals', N'];

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Aún no se han introducido etiquetas.

Community Treasure Hunt

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

Start Hunting!

Translated by