Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:在excel中插入缺失日期的行_Matlab_Insert - Fatal编程技术网

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

MATLAB:在excel中插入缺失日期的行,matlab,insert,Matlab,Insert,我有116个大型数据集的excel文件,我正在尝试处理。目前我有两列数据,日期如下: 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'

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

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
2011年4月9日至2011年4月20日之间可能存在间隙,且此类间隙在数据集中的不同文件中不规则。我需要将其中的几个系列连接到同一个数据库中,因为每个系列缺少的值不同,所以当前每行上的日期不对齐


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

我不确定我的答案有多有效,但下面的示例似乎适用于一个小示例

我的想法是将日期转换为数值,并将结果向量与跨越日期的数字进行比较。在本例中,如果我正确阅读了您的问题,我将删除第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向量,并用空格填充它,但这会带来相当大的开销