You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Octave中合并不同长度时间序列并为空缺日期补零

在Octave中按日期合并两个长度不同的时间序列(缺失值补零)

要实现将两个维度为[n,2]和[m,2]的时间序列按日期合并、缺失值补零的需求,intersect仅保留共同日期无法满足要求,需要基于日期并集构建结果,具体步骤如下:

假设数据已加载

假设你已将两组数据导入Octave,分别存储为:

  • data1:第一组数据,第一列为日期字符串,第二列为Difference数值
  • data2:第二组数据,第一列为日期字符串,第二列为Temperature数值

完整实现代码

% 1. 将日期字符串转换为数值格式(消除字符串匹配误差)
date_fmt = 'yyyy-mm-dd HH:MM:SS';
date1_num = datenum(data1(:,1), date_fmt);
date2_num = datenum(data2(:,1), date_fmt);

% 2. 获取所有唯一日期(两个数据集的日期并集)
all_dates_num = unique([date1_num; date2_num]);
all_dates_str = datestr(all_dates_num, date_fmt);

% 3. 初始化结果矩阵
result_rows = length(all_dates_num);
result = zeros(result_rows, 3);
result(:,1) = all_dates_num; % 暂存日期数值

% 4. 填充Temperature列(无匹配则补0)
for i = 1:result_rows
    match_idx = find(date2_num == all_dates_num(i));
    result(i,2) = isempty(match_idx) ? 0 : data2(match_idx, 2);
end

% 5. 填充Difference列(无匹配则补0)
for i = 1:result_rows
    match_idx = find(date1_num == all_dates_num(i));
    result(i,3) = isempty(match_idx) ? 0 : data1(match_idx, 2);
end

% 6. 格式化输出结果
header = {'DATE:', 'Temperature', 'Difference'};
fprintf('%22s %15s %15s\n', header{:});
for i = 1:result_rows
    fprintf('%22s %15.4f %15.4f\n', all_dates_str(i,:), result(i,2), result(i,3));
end

代码说明

  1. 日期格式转换:用datenum将字符串日期转为数值,确保日期能准确比对,避免字符串匹配的精度问题。
  2. 获取日期并集:通过unique合并两个数据集的日期并去重,得到所有需要保留的日期条目。
  3. 缺失值补零:遍历每个唯一日期,在对应数据集中查找匹配项,存在则取对应数值,不存在则填充0。
  4. 格式化输出:将数值日期转回字符串,按表格格式打印输出,与你期望的结果格式一致。

适配示例数据效果

用你提供的示例数据测试时,输出结果会包含所有日期:

  • 2020-10-18的日期仅存在于第二组,对应Difference列补0
  • 2020-10-26的日期仅存在于第一组,对应Temperature列补0

内容的提问来源于stack exchange,提问作者user1669504

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:15:05