How to get cumulative sum in yearly buckets
4 views (last 30 days)
Show older comments
Wendy Cameron
on 17 May 2018
Commented: Wendy Cameron
on 18 May 2018
I have several years of data and temperature in one table. I want to calculate a cumulative temperature sum which I've done simply as A.CumulativeTemp= cumsum(A.Temp);
My question is, how can get a cumulative temp for each year, i.e. so it gives a cumulative temperature for the entire 2016, then starts again at zero in the same column and does the same for 2017 and so on?
Kind regards, Wendy
2 Comments
Accepted Answer
Akira Agata
on 17 May 2018
How about the following ?
% Read the data file and delete the answer column
opts = detectImportOptions('Reset Accum temp.xls');
T = readtable('Reset Accum temp.xls',opts);
T.AccumulatedTemperatureOfEachYear = []; % Remove the answer
% Apply cumsum function for each Year
T2 = varfun(@cumsum,T,'GroupingVariables','Year');
T = [T T2(:,'cumsum_Temperature')];
More Answers (3)
Ameer Hamza
on 17 May 2018
One way to do this is follow
[group, uniqueYears] = findgroups(A.years)
yearSum = splitapply(@sum, A.Temp, group)
yearSummary = [uniqueYears, group];
Or you can also use accumarray as follow:
yearSum = accumarray(A.years, A.Temp);
Andrei Bobrov
on 17 May 2018
data = readtable('Reset Accum_temp.xls','range','A2:B32');
[~,~,c] = unique(data.Year);
N = accumarray(c,data.Temperature);
T = data.Temperature;
lo = [0;diff(data.Year)]~=0;
T(lo) = T(lo) - N(1:end-1);
data.AccumulatedTemperatureOfEachYear = cumsum(T);
Razvan Carbunescu
on 17 May 2018
If using R2018a and wanting the final sum each year only can use groupsummary to get this more directly:
>> T = readtable('Reset Accum_temp.xls','range','A2:B32');
>> GT = groupsummary(T,'Year','sum','Temperature')
GT =
3×3 table
Year GroupCount sum_Temperature
____ __________ _______________
2015 10 267
2016 10 166
2017 10 208
You can use the date directly also with groupsummary
>> T.Date = datetime(T.Year,1,1); % reconstruct full Date
>> GT = groupsummary(T,'Date','year','sum','Temperature')
GT =
3×3 table
year_Date GroupCount sum_Temperature
_________ __________ _______________
2015 10 267
2016 10 166
2017 10 208
See Also
Categories
Find more on Dates and Time in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!