How do I find a daily minimum value using retime when I have categorial data in the table?

2 ビュー (過去 30 日間)
I have a table with three columns as shown in the below snapshot where column 3 (Material) is categorical. I would like to obtain the daily minimum anomaly time-series and corresponding name of the category from the Material column using the retime function. I can apply retime to estimate minimum but I am not sure how to keep the corresponding row for the 'Material' category. The following code worked but I would like to know how to keep the corrresponding categorical information from column 3.
TT=timetable(time,Anomaly,Material);
subset=TT(:,{'Anomaly'});
TT1=retime(subset,'daily','max');

採用された回答

Star Strider
Star Strider 2021 年 9 月 1 日
My impression is that ‘TT1’ should have all the other information as well.
If it does not, post the data (or a representative subset) as an attachment here (use the paperclip icon) so we can work with it.
.
  4 件のコメント
Star Strider
Star Strider 2021 年 9 月 1 日
As always, my pleasure!
That is an interesting problem!
.

サインインしてコメントする。

その他の回答 (1 件)

Peter Perkins
Peter Perkins 2022 年 3 月 2 日
SS's answer seems to have worked, and I'm late to the party, but I always like to provide an alternative to using datenum, and rowfun is lonely. So here's another way:
>> load sample.mat
>> sampledata = sortrows(table2timetable(sampledata));
Ordinarily, at this point you might turn to retime, but that works on each var separately. So the thing to use is rowfun, which can work on multiple vars, and allows grouping. (SS used max, I've used min).
>> sampledata.Day = dateshift(sampledata.DT,"start","day")
sampledata =
54×3 timetable
DT Anomaly Material Day
____________________ ___________________ ________ ___________
07-Dec-2019 17:00:00 0 Plasctic 07-Dec-2019
09-Dec-2019 16:00:00 -0.525000000000006 Plasctic 09-Dec-2019
09-Dec-2019 21:00:00 -4.27500000000001 Plasctic 09-Dec-2019
[snip]
25-Feb-2020 10:00:00 1.95 Plasctic 25-Feb-2020
29-Feb-2020 16:00:00 0.825000000000003 Metal 29-Feb-2020
29-Feb-2020 20:00:00 -2.75 Metal 29-Feb-2020
>> rowfun(@myFun,sampledata,"GroupingVariable","Day","OutputVariableNames",["Anomaly" "Material"])
ans =
27×4 timetable
DT Day GroupCount Anomaly Material
____________________ ___________ __________ ___________________ ________
07-Dec-2019 17:00:00 07-Dec-2019 1 0 Plasctic
09-Dec-2019 21:00:00 09-Dec-2019 2 -4.27500000000001 Plasctic
17-Dec-2019 17:00:00 17-Dec-2019 1 -0.174999999999997 Plasctic
[snip]
21-Feb-2020 11:00:00 21-Feb-2020 3 1.5 Metal
25-Feb-2020 03:00:00 25-Feb-2020 2 -5.575 Plasctic
29-Feb-2020 20:00:00 29-Feb-2020 2 -2.75 Metal
where
function [aMin,mMin] = myFun(a,m)
[aMin,iMin] = min(a);
mMin = m(iMin);
end

カテゴリ

Help Center および File ExchangeTimetables についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by