Azzera filtri
Azzera filtri

how to edit this matrix

1 visualizzazione (ultimi 30 giorni)
Michael
Michael il 4 Feb 2014
Commentato: Michael il 6 Feb 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 Commento
Walter Roberson
Walter Roberson il 4 Feb 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 ?

Accedi per commentare.

Risposta accettata

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

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Search Path in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by