Monthly data to seasonal using sum (how to use splitapply)

6 vues (au cours des 30 derniers jours)
BN
BN le 28 Mar 2020
Commenté : BN le 30 Mar 2020
Hi, I wish you are safe and healthy!
I have a 1 x 3 cell with three 360 x 3 table. Each table has a column date with 30 years of monthly data (30 x 12 = 360). I want to have data for seasonal scale, winter, spring, summer and autumn correspond to December–February, March-May, June–August, and September–November, respectively using sum. I would like to create each season in a separate column with the corresponding name of the season and located after all existing columns in the tables.
Thank you so much

Réponse acceptée

Peng Li
Peng Li le 28 Mar 2020
Modifié(e) : Peng Li le 28 Mar 2020
Try below
tbl = CELL{1};
tbl.month = month(tbl.dates);
tbl.season = floor(tbl.month ./ 3);
tbl.season(tbl.season == 4) = 0;
tbl.season = categorical(tbl.season, [0 1 2 3], ["Spr", "Sum", "Aut", "Win"]);
You can use findgroups to group them based on seasons and use varfun or splitapply to calculate sum.
  5 commentaires
Peng Li
Peng Li le 30 Mar 2020
>> [grp, meanTbl] = findgroups(tbl(:, 'season'));
>> meanTbl.rrr24 = splitapply(@mean, tbl.rrr24, grp);
>> meanTbl
meanTbl =
4×2 table
season rrr24
______ ______
Spr 14.038
Sum 35.004
Aut 10.949
Win 16.958
BN
BN le 30 Mar 2020
Thank you

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by