Consolidating row values from previous column duplicate values.
Mostrar comentarios más antiguos
Hi all,
Is it possible to write a script to make MATLAB look at the first two columns of a matrix, and if there are multiple rows where Column 1 and Column 2 have the same values, to put these rows together and sum the corresponding values of a third column.
An example would be like this;
[a x 2;
a x 3;
b x 4;
a y 5;
b y 6;
b y 7;
c y 8]
and so the script will recognize there are two rows with a in column 1 and x in column 2, so it will put them together and add the values in the third row.
So the output would be like this;
[a x 5;
b x 4;
a y 5;
b y 13;
c y 8]
Forgive my bad formatting of the matrix, but any help will be greatly appreciated!
Kind regards
Willem
Respuesta aceptada
Más respuestas (2)
Azzi Abdelmalek
el 1 de Ag. de 2013
[a,b,c]=unique(A(:,1:2),'rows','stable')
out=[a accumarray(c,A(:,3))]
1 comentario
Willem
el 1 de Ag. de 2013
Andrei Bobrov
el 2 de Ag. de 2013
Editada: Andrei Bobrov
el 2 de Ag. de 2013
A = [1 1 3;
1 1 4;
1 1 7;
1 2 1;
1 2 6;
2 3 5;
3 6 4;
3 6 9;
3 6 3]
A(:,end + (1:3)) = randi(10,size(A,1),3);
[a1,ii,ii] = unique(A(:,1:2),'rows');
[i1 j1] = ndgrid(ii,1:size(A,2) - 2);
a2 = A(:,3:end);
out = [a1 accumarray([i1(:),j1(:)],a2(:))];
Categorías
Más información sobre Performance and Memory en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!