MATLAB:在excel中插入缺少日期的行

时间:2015-10-14 13:51:03

标签: matlab insert

我有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列,以便我有一个连续的时间序列。

1 个答案:

答案 0 :(得分:0)

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

我的想法是将您的日期转换为数字值,并将结果向量与跨越日期的数字进行比较。在这个例子中,我将删除第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。将所有日期向量转换回字符串。

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