sum all monthly values for every year

4 visualizzazioni (ultimi 30 giorni)
Colby
Colby il 2 Feb 2015
Commentato: Scott Miller il 8 Ott 2015
I have a large matrix A. In column 1, I have serial dates. They are in half month time steps. (ex ...10/01/1984, 10/15/1984, 11/01/1984,.... or as serial dates ...724916, 724930, 724947, ...) Then in the second column, are values for each date. I would like a new matrix that has the sum of the values in column b, for every year in column a. For the life of me, I can't figure out a simple way to execute this. Does anyone have a simple answer? Thanks a lot. I appreciate your time!

Risposta accettata

Guillaume
Guillaume il 2 Feb 2015
Easy:
dv = datevec(A(:, 1)); %convert to datevec to easily separate years
[years, ~, subs] = unique(dv(:, 1)); %get unique years and location
yearsum = accumarray(subs, A(:, 2)); %accumarray with most default values does sums
  2 Commenti
Colby
Colby il 2 Feb 2015
Thank you very much Guilaume!
Scott Miller
Scott Miller il 8 Ott 2015
Thanks, Guillaume! Adding an @max function handle to the accumarray function in your code sample is a slick way to single out peak annual flows from a stream flow or runoff time series.
pkQ = accumarray(subs, tsQ(:, 2),[],@max);

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Dates and Time in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by