2016-01-15 48 views
0

我有時間序列,而時間存儲在datenum格式中。 datenum矢量已經由datetime矢量構建而成,格式爲"dd-MMM-yyy HH:MM:SS「由於我的數據有1分鐘的頻率,因此我需要1440個數據點以及每天的時間序列中的相應時間,但有些日子有一些數據。點丟失(通常不超過5),我需要手動填寫Matlab將缺失數據插入時間序列對象

因此,我有以下問題:

  1. 我如何可以獲取從時間序列每日數據(我已經嘗試使用getsampleusingtimeunique date values完全基於日期,但是這將不起作用)。

  2. 我如何根據每天的時間序列中的datenum時間確定缺失值,然後將相應時間插入數據點「0」?

我很感激任何幫助!

回答

0

考慮下面的例子(沒有很好的編程...):

clc; clear; 

time = {}; 

% Sample time series 
for d = 1:3 
    for h = 0:23 
     if h < 10 
      hstr = ['0' num2str(h)]; 
     else 
      hstr = num2str(h); 
     end 
     for m = 0:59 
      if m < 10 
       mstr = ['0' num2str(m)]; 
      else 
       mstr = num2str(m); 
      end 
      time{end+1,1} = ['0' num2str(d) '-01-2016 ' hstr ':' mstr ':00']; 
     end 
    end 
end 

% Missing times 
time([10 2000]) = []; 

input_format = 'dd-MM-yyyy HH:mm:ss'; 

num = datenum(datetime(time,'InputFormat',input_format)); 

現在,您可以查看特定日期的值,如果你計算出一天的開始的datenum和的開始明天。中間的所有值都屬於選定日期。

% Check for second day (1.) 
test1 = '02-01-2016 00:00:00'; 
test2 = '03-01-2016 00:00:00'; 

num1 = datenum(datetime(test1,'InputFormat',input_format)); 
num2 = datenum(datetime(test2,'InputFormat',input_format)); 

% Find all in one day 
r = num>=num1 & num<num2; 

day2 = num(r); % Only the values from the second day. 

尋找失蹤的值,就可以計算出1分鐘三角洲和搜索所有值,其中的差別是較大的。

% Find missing values (2.) 
test1 = '01-01-2016 00:00:00'; 
test2 = '01-01-2016 00:01:00'; 

num1 = datenum(datetime(test1,'InputFormat',input_format)); 
num2 = datenum(datetime(test2,'InputFormat',input_format)); 

delta = num2-num1; 

% Find missing values 
pos = find(diff(num) > delta*1.1); % To avoid numerical issues 

注意,如果秒的所有相同的值被使用(如在我的情況00)第二個例子中才起作用。

編輯:

另一個選擇是直接使用datetime結構。

dates = datetime(time,'InputFormat',input_format); 

% 1. 
day2 = find([dates.Day] == 2); 

% 2. 
pos = find(diff([dates.Minute])>1);