我有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/11
和20/04/11
之间可能存在差距,并且此类差距在数据集的不同文件中不规则。我需要将这些系列中的几个连接到同一个数据库中,并且因为每个系列的缺失值不同,所以日期当前并不对齐每一行。
我想为这些缺失的时间戳生成行,并使用空值(无数据,不为零)填充Y
列,以便我有一个连续的时间序列。
答案 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向量并用空格填充它,但这会带来相当大的开销。