Group number identification consecutive numbers

3 visualizaciones (últimos 30 días)
Marek Drliciak
Marek Drliciak el 11 de Nov. de 2022
Movida: Bruno Luong el 21 de Nov. de 2022
Hello
I have millions of 1-0 data in my database. I need to detect groups of consecutive units. I would like to ask you to create the attribute "Gr_numb". An example is given in the attached file. The searched attribute is calculated there. But in Excel it is very complicated and unusable for a large database.
Thank You
  6 comentarios
Image Analyst
Image Analyst el 11 de Nov. de 2022
OK I think I see now, though it is probably a poor example since the second group and third groups both have a group label of 3. I don't see why two different groups should have the same group number, but the example would have been clearer if the third group had had 4 or 5 1's in it instead of 3 (same as the prior group). You must have the Mind Reading Toolbox Bruno.
Jan
Jan el 11 de Nov. de 2022
Editada: Jan el 11 de Nov. de 2022
@Image Analyst: The term "group number" is misleading. "Number of group members" would be clearer.

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 11 de Nov. de 2022
Editada: Jan el 11 de Nov. de 2022
index = [1 0 1 1 1 0 0 0 1 1 1 0 1 1 0 0 1 1];
[b, n] = RunLength(index);
m = n(b == 1);
Gr_numb = zeros(size(index));
GR_numb(index == 1) = RunLength(m, m);
If you do not have a C-compiler installed, use RunLength_M from this submission.
Or:
d = [true, diff(index) ~= 0]; % TRUE if values change
n = diff(find([d, true])); % Number of repetitions
m = n(index(d) == 1);
index(index == 1) = repelem(m, m)
index = 1×18
1 0 3 3 3 0 0 0 3 3 3 0 2 2 0 0 2 2
  1 comentario
Marek Drliciak
Marek Drliciak el 21 de Nov. de 2022
Movida: Bruno Luong el 21 de Nov. de 2022
Thank You very much. That was what I looking for.

Iniciar sesión para comentar.

Más respuestas (1)

Stephen23
Stephen23 el 11 de Nov. de 2022
X = [1;0;1;1;1;0;0;0;1;1;1;0;1;1;0;0;1;1;0;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;;0;1;1;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0]
X = 65×1
1 0 1 1 1 0 0 0 1 1
D = diff([0;X;0]);
B = find(D>0);
E = find(D<0);
L = E-B;
G = X;
G(X==1) = repelem(L,L)
G = 65×1
1 0 3 3 3 0 0 0 3 3

Categorías

Más información sobre Get Started with MATLAB en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by