如何在Matlab中将表格内月度数据转换为季度平均数据
Matlab实现月度TB3m数据转季度均值并匹配季度末日期的方法
以下两种实现方案,你可以根据自己的Matlab版本和使用习惯选择:
方案1:使用timetable时间聚合(推荐,操作最简单)
适合R2016b及以上版本,内置时间序列处理逻辑不用自己写分组规则
- 第一步:将现有月度数据转换为timetable格式
% 先把月末日期转为datetime格式(如果原数据是字符串/数值格式需要先转换,可根据实际格式调整InputFormat参数) dates_monthly = datetime(dates_monthly,'InputFormat','yyyy/MM/dd'); % 构建月度timetable TT_monthly = timetable(dates_monthly, TB3m_monthly);
- 第二步:按季度聚合计算均值,自动生成季度末日期
% retime函数按季度重采样,聚合方法取均值,时间戳自动设为季度最后一天 TT_quarterly = retime(TT_monthly, 'quarterly', 'mean', 'EndOfQuarter', true);
- 第三步:和你已有的
dates_quarterly表格对齐
% 直接提取聚合后的季度均值和对应日期 TB3M_quarterly = TT_quarterly.TB3m_monthly; auto_q_date = TT_quarterly.dates_monthly; % 如果需要和你现有季度末日期匹配对齐的话用ismember筛选 [~, loc] = ismember(dates_quarterly, auto_q_date); TB3M_quarterly = TB3M_quarterly(loc);
方案2:手动分组计算(兼容低版本Matlab)
不需要依赖timetable,自己做分组统计即可
- 第一步:生成每个月度对应的唯一季度分组标识
% 用年份+季度编号组成唯一分组,比如1975年第一季度标识为19751 q_group = year(dates_monthly)*10 + quarter(dates_monthly);
- 第二步:按季度分组计算均值
[unique_q, ~, group_idx = unique(q_group); % 分组计算每组的TB3m均值,存在缺失值可以把@mean换成@nanmean TB3M_quarterly = accumarray(group_idx, TB3m_monthly, [], @mean);
- 第三步:生成对应季度末日期,和
dates_quarterly对齐
% 生成每个分组对应的季度最后一天日期 generated_q_date = datetime(floor(unique_q/10), mod(unique_q,10)*3, eomday(floor(unique_q/10), mod(unique_q,10)*3)); % 和你现有季度日期匹配 [~, loc] = ismember(dates_quarterly, generated_q_date); TB3M_quarterly = TB3M_quarterly(loc);
注意:如果你的月度数据存在缺漏,建议先做缺失值填充或者用
nanmean替代mean计算均值,避免出现空值。
内容的提问来源于stack exchange,提问作者Nikhil Kakdiya
相关产品推荐
相关产品推荐

