【问题标题】:MATLAB: Insert rows for missing dates in excelMATLAB:在 excel 中插入缺失日期的行
【发布时间】:2015-10-15 01:16:52
【问题描述】:

我有 116 个大型数据集的 excel 文件,我正在尝试处理。目前我有 2 列数据,日期如下:

Date            Value
'18/08/2006'    62.6000000000000
'19/08/2006'    0
'20/08/2006'    0
'21/08/2006'    0
'22/08/2006'    0
'23/08/2006'    18.8000000000000
'24/08/2006'    1.80000000000000
'25/08/2006'    0
'26/08/2006'    0
'27/08/2006'    15
'28/08/2006'    2.60000000000000

09/04/1120/04/11 之间可能存在间隙,并且这种间隙在数据集中的不同文件中是不规则的。我需要将这些系列中的几个连接到同一个数据库中,并且由于每个系列的缺失值不同,因此日期当前并未在每一行上对齐。

我想为这些缺失的时间戳生成行,并用空白值(无数据,不为零)填充Y 列,这样我就有了一个连续的时间序列。

【问题讨论】:

    标签: matlab insert


    【解决方案1】:

    我不确定我的答案是否有效,但以下似乎适用于一个小例子。

    我的想法是将您的日期转换为数值,并将结果向量与跨越日期的数字进行比较。在此示例中,我将删除 19 日和 21 日以创建缺失值(如果我正确阅读了您的问题)。

    dates  = {'18/08/2006','19/08/2006','20/08/2006','21/08/2006',...
              '22/08/2006','23/08/2006','24/08/2006','25/08/2006',...
              '26/08/2006','27/08/2006','28/08/2006'}';
    values = [62.6 0 0 0 0 18.8 1.8 0 0 15 2.6]';
    dates([2,4])  = [];
    values([2,4]) = [];
    
    numericDates = datenum(dates,'dd/mm/yyyy');
    allDates = (numericDates(1):numericDates(end))';
    [~,existingDates,~] = intersect(allDates,numericDates);
    

    existingDates 现在是一个向量,其中包含所有日期中存在日期的索引。您可以使用它来复制它们存在的值:

    >> finalValues = nan(size(allDates));
    >> finalValues(existingDates) = values
    finalValues =
       62.6000
           NaN
             0
           NaN
             0
       18.8000
        1.8000
             0
             0
       15.0000
        2.6000
    

    您还可以使用 datestr 将 allDates 向量转换回字符串。

    我使用 NaN 来表示“空白”值,这在 matlab 数值矩阵中并不存在。如果你真的想要,你可以创建一个元胞数组而不是 NaN 向量并用空白填充它,但这会带来相当多的开销。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2016-07-20
      相关资源
      最近更新 更多