我的每日收盘价在2000-01-01'之间。和' 2014-12-31' 3000股票。他们都错过了周末,但另外,不同的股票随机错过了不同的日子。
e.g。
stock_1 = {
{ '2014-12-01' [1.1] } % thu
{ '2014-12-02' [1.2] } % fri
% mon
{ '2014-12-06' [1.3] } }; % tue
stock_2 = {
{ '2014-12-01' [2.1] } % thu
% fri
{ '2014-12-05' [2.2] } % mon
{ '2014-12-06' [2.3] } }; % tue
(注意它们是cell
代表时间序列而不是timeseries
个对象。
我试图构建一个矩阵:
mat = [
[1.1 2.1] % thu
[1.2 2.1] % fri
[1.2 2.2] % mon
[1.3 2.3] ] % tue
如何将stock_1
,stock_2
等合并到mat
中,以便用最后一个有效值替换缺失值?
我想第一步可能是一个日期并从时间开始返回“工作日#”的函数'然后运行第一列。
所以,如果我有:
stock_1a = {
{ 1 1.1 } % thu
{ 2 1.2 } % fri
{ 4 1.3 } }; % tue
......等等,我可以预先分配一个矩阵并从中填写。
然后我必须弄清楚如何替换0
元素。
我总是可以使用循环进行C风格(最大丑)并让它继续运行,因为它是一次性预处理。但它会让我的内心编码器哭泣。
干净的方法是什么?
答案 0 :(得分:1)
如果你使用MATLAB datenum
类型,你应该可以对它进行排序(你可以使用datetime来稍微简化一下,但是后来它会使插值部分复杂化)。我的想法如下:
% First, generate a list of all of the dates you're looking at
dates = datenum(2000,1,1):datenum(2014,12,31);
% Then determine the day of the week for each
wkdy = weekday(dates);
% Then, exclude the weekends
dates = dates(wkdy~=1 & wkdy~=7); % Saturday is 7, Sunday is 1
这会列出我们期望股票价值的所有日期。您可以按如下方式从单元阵列中提取数据:
s = reshape([stock_1{:}],2,[]);
stock_1_date = datenum(s(1,:));
stock_1_data = [s{2,:}];
您现在可以使用interp1
填写缺失的数据:
filled_stock_1_data = interp1(stock_1_date,stock_1_data,dates,'previous');
然后重复每个其他股票价值。