重命名Fints系列的功能?

时间:2016-05-21 22:19:41

标签: matlab

我使用Financial Toolbox管理一些时间序列数据,但我没有找到重命名fints对象内数据系列的函数。是否存在?

在下面的代码中,我延迟了一系列,然后想要将其与原始版本合并,但只保留一个版本,因为系列名称是相同的。在第二部分中,我将lagObj拆开,更改名称并构建一个新的lagObj2,这将导致合并的fints对象具有两列预期。

工具箱中是否有一个函数可以执行此操作,或者是否有某些功能可以访问现有fints对象的属性,因此我可以更改lagObj中的名称而不必执行额外的工作?

data = (1:6)';
dates = (today:today+5)';
% Create fints and lagged versions
fintsObj = fints(dates, data);
lagObj = lagts(fintsObj);
% Both are called 'series1'
fieldnames(fintsObj, 1)
fieldnames(lagObj, 1)

% merged object has single series due to identical names
merge(fintsObj, lagObj, 'SortColumns', 0)

%% ----------------------------------------
% Tear apart lagObj and rename series
lagDates = lagObj.dates;
lagData  = fts2mat(lagObj);
lagNames = fieldnames(lagObj);

lagNames{4,1} = 'lagSeries1';

% Rebuild lagObj with new name
lagObj2 = fints(lagDates, lagData, lagNames{4,1});

%% -----------------------------------------
% Now merge has two series
merge(fintsObj, lagObj2, 'SortColumns', 0)

1 个答案:

答案 0 :(得分:2)

您想要的功能是chfield,它允许您更改数据系列的名称。由于您没有指定fints的第三个输入,因此默认为series1series2等。使用chfield您可以更改数据系列名称fints对象。

f = chfield(f, 'series1', 'MySeries');

对于您的具体示例,这看起来像:

data = (1:6)';
dates = (today:today+5)';

% Create the initial time series object
fintsObj = fints(dates, data, 'Original');

% Change the field on the new time series object
lagObj = chfield(lagts(fintsObj), 'Original', 'Lag');

% Then merge
merge(fintsObj, lagObj, 'SortColumns', 0)

%   desc:   || LAGTS on
%   freq:  Unknown (0)
%
%   'dates:  (6)'    'Original:  (6)'    'Lag:  (6)'
%   '21-May-2016'    [             1]    [        0]
%   '22-May-2016'    [             2]    [        1]
%   '23-May-2016'    [             3]    [        2]
%   '24-May-2016'    [             4]    [        3]
%   '25-May-2016'    [             5]    [        4]
%   '26-May-2016'    [             6]    [        5]