How to calculate data higher than monthly mean value for one year data set?

4 次查看(过去 30 天)
Hi, I try to calculate the simple Mean High Water Level from one year tidal data set. The data is attached.
When I tried for one month data (September only), the code is work.
%Trial MSL and MHWL one month, September only
load TT_15_Sep.mat
MSL= retime(TT_15_Sep,'monthly','mean');
HWL = TT_15_Sep(TT_15_Sep.WL > MSL.WL,:);
MHWL= retime(HWL,'monthly','mean');
But when I tried to do same thing for one year dataset, it said that "the matrix dimension must agree". Anything wrong with this code?. Thank you.
%Trial MSL and MHWL for one year
load TT_15.mat
MSL= retime(TT_15,'monthly','mean');
HWL = TT_15(TT_15.WL > MSL.WL,:); % error in this part "Matrix dimensions must agree."
MHWL= retime(HWL,'monthly','mean');
  1 个评论
SALAH ALRABEEI
SALAH ALRABEEI 2021-6-6
Because your MSL is 12 means values ( for each month), and TT_15 is the over all, you cannot use logic operations unless both variables are equal or one of them is single value.
Consider using loop over each mean of month ( TT_15.WL(i)) the extract the mean of each month.

请先登录,再进行评论。

采纳的回答

dpb
dpb 2021-6-6
编辑:dpb 2021-6-6
rowfun to the rescue.
TT_15.Month=month(TT_15.DT1); % generate grouping variable; rowfun() needs it in table
TT_HHWL15=rowfun(@(wl) deal(mean(wl,'omitnan'),mean(wl(wl>mean(wl,"omitnan")),"omitnan")),TT_15, ...
'InputVariables','WL', ...
'GroupingVariables',"Month", ...
"NumOutputs",2, ...
'OutputVariableNames',{'HWL','HHWL'});
returns
ans =
12×4 timetable
DT1 Month GroupCount HWL HHWL
___________ _____ __________ _______ _______
01-Jan-2015 1.00 744.00 1884.39 2038.19
01-Feb-2015 2.00 672.00 1719.78 1875.63
01-Mar-2015 3.00 744.00 1750.48 1895.43
01-Apr-2015 4.00 720.00 1804.50 1940.51
01-May-2015 5.00 744.00 1920.51 2050.72
01-Jun-2015 6.00 720.00 1866.68 2006.25
01-Jul-2015 7.00 744.00 1816.60 1956.12
01-Aug-2015 8.00 744.00 1777.96 1917.84
01-Sep-2015 9.00 720.00 1766.41 1913.30
01-Oct-2015 10.00 744.00 1776.43 1894.45
01-Nov-2015 11.00 720.00 1862.92 2016.21
01-Dec-2015 12.00 744.00 1933.37 2071.70
>>
NB: There are NaN elements in many months so will return NaN w/o the 'omitnan' flag for mean
  4 个评论
Amra Rajuli
Amra Rajuli 2021-6-6
Thank you for your response. I finally found why the code did not work. If you may pay attention to
rowfun(@(wl) deal(mean(wl,'omitnan') % the omitnan part
the other omitnan was written "omitnan". Just synchronize the written format of 'omitnan' and finally the code work. Thank you very much. Really appreciate it.
PS: The output variable suppose to be:
'OutputVariableNames',{'MSL','MHWL'});
dpb
dpb 2021-6-6
The use of a char string vs string for the omitnan flag is immaterial -- something else got munged in your copy...if you'll look at the result I pasted from command window that was taken by copying from the updated Answer and pasted, it also shows the different forms and ran just fine...
I can't reproduce the error here with anything I can think of to try -- oh! wait--what release of ML are you on? The message says the variable names must be "...character vectors, or cell arrays of character vectors." Is it possible you're using an earlier release of MATLAB (I'm on R2020B) that doesn't recognize the string variable for "Month" in the 'GroupingVariables' parameter value field I wonder?
Post the actual two lines that fail and work and your release number--I'll bet that's it before was updated to accept the string input form.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Preprocessing Data 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by