how to edit this matrix

1 visualización (últimos 30 días)
Michael
Michael el 4 de Feb. de 2014
Comentada: Michael el 6 de Feb. de 2014
I have a matrix B that has three columns. A week number is in the first column, a day number is in the second column, and data is in the third column.
B=
1 6 9
3 15 11
4 23 11
5 30 11
6 37 12
6 38 11
6 39 10
9 58 12
10 65 13
What I want to do is turn this into a matrix with 10 rows, one for each week. Whenever there is a week with no data, like week 2 and week 7, I want to add a row with the proper week number, but zeros for the day number and the data. Also, whenever there is a week with more than 1 data entry, like week 6, I want to convert that to one row with 6 as the week number, any value for the day number, and the mean of the data values as the one data value. In other words, I want to convert matrix B into:
C=
1 6 9
2 0 0
3 15 11
4 23 11
5 30 11
6 38 11
7 0 0
8 0 0
9 58 12
10 65 13
How can I go about doing this?
  1 comentario
Walter Roberson
Walter Roberson el 4 de Feb. de 2014
I notice you have edited the question, but as I read, I do not notice the difference between the current version and the original ?

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 4 de Feb. de 2014
widx = B(:,1);
dayvec = accumarray(widx, B(:,2), [], @min);
valvec = accumarray(widx, B(:,3), [], @mean);
C = [(1:max(widx)).', dayvec(:), valvec(:)];
  5 comentarios
Walter Roberson
Walter Roberson el 6 de Feb. de 2014
Setting weekvec like that is not needed. Leave that line out and use
C = [(1:length(dayvec)).', dayvec(:), valvec(:)];
Michael
Michael el 6 de Feb. de 2014
Ahh yes, that makes way more sense, thanks

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Dates and Time en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by