首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MATLAB根据年度数据创建月度时刻表

MATLAB根据年度数据创建月度时刻表
EN

Stack Overflow用户
提问于 2022-11-13 13:17:55
回答 1查看 98关注 0票数 0

你好,我正在尝试探索一些年度数据,每个月都可以方便地查阅这些数据。为了分离数据,我在1月份使用了以下代码:

代码语言:javascript
运行
复制
d1 = '2021-01-01 00:00:00';
d2 = '2021-01-31 23:59:00';
t1 = datetime(d1,'InputFormat','yyyy-MM-dd HH:mm:ss');
t2 = datetime(d2,'InputFormat','yyyy-MM-dd HH:mm:ss');
idx_time = (date_time >= t1) & (date_time <= t2);

有更简单的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-14 07:10:25

您只需使用month方法从date_time中提取月份组件,如下所示:

代码语言:javascript
运行
复制
idx_time = month(date_time) == 1;

要为每个月的数据创建单独的数组,可以使用findgroupssplitapply,如下所示。

代码语言:javascript
运行
复制
[g, id] = findgroups(month(date_time));
dataByMonth = splitapply(@(x) {x}, var, g)

这将导致dataByMonth是一个12x1 cell数组,其中每个元素都是一个月的数据。id告诉你哪个月。

在聊天中编辑下面的讨论,结果是下面的方法是需要的。

代码语言:javascript
运行
复制
l = load('data.mat');
% Create a timetable
tt = timetable(l.date_time, l.var);
% Aggregate per day
amountPerDay = retime(tt, 'daily', 'sum')
% Select days with non-zero amount
anyPerDay = timetable(rainPerDay.Time, double(amountPerDay.Var1 > 0))
% Compute the number of days per month with non-zero amount
retime(anyPerDay, 'monthly', 'sum')

(请注意,double(amountPerDay.Var1>0)的使用是为了解决MATLAB旧版本中不允许retime聚合logical数据的限制)

编辑2:要将结果timetabletimetable变量显示为长月份名称,只需设置该变量的the Format property

代码语言:javascript
运行
复制
rainyDaysPerMonth = retime(rainyDays, 'monthly', 'sum')
rainyDaysPerMonth.Time.Format = 'MMMM'

编辑3:要获得每月最大的降雨日,这需要splitapply和一个小助手函数。像这样

代码语言:javascript
运行
复制
g = findgroups(month(amountPerDay.Time));
% Use splitapply to find the day with the maximum amount. Also
% need to return the day on which that occurred, so we need a small
% helper function
rainiestDayPerMonth = splitapply(@iMaxAndLoc, amountPerDay.Time, ...
    amountPerDay.Var1, g);

% Given vectors of time and value, return a single-row table
% with the time at which the max value occurs, and that max value
function out = iMaxAndLoc(t, v)
[maxV, idx] = max(v);
out = table(t(idx), maxV, 'VariableNames', {'Time', 'Value'});
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74421328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档