在 MATLAB 中,不能将字符串作为矩阵元素。为此,您需要使用元胞数组。这是使用元胞数组和containers.Map
s 的解决方案。
FirstCellArray = {
'01/01/2010', 1;
'02/01/2010', 2;
'03/01/2010', 3;
'05/01/2010', 11;
'06/01/2010', 17
};
SecondCellArray = {
'01/01/2010', 4;
'02/01/2010', 5;
'04/01/2010', 6;
'05/01/2010', 7;
};
AllDatesCellArray = union(FirstCellArray(:,1), SecondCellArray(:,1));
% 为两个元胞数组创建containers.Map
s。containers.Map
s 是哈希表。
DateToFirstNumberMap = containers.Map(FirstCellArray(:,1), FirstCellArray(:,2));
DateToSecondNumberMap = containers.Map(SecondCellArray(:,1), SecondCellArray(:,2));
WithNaNsCellArray = AllDatesCellArray;
for Index = 1:size(WithNaNsCellArray, 1)
Key = AllDatesCellArray{Index, 1};
try
NumberOne = cell2mat(values(DateToFirstNumberMap, cellstr(Key)));
catch
NumberOne = NaN;
end
WithNaNsCellArray{Index, 2} = NumberOne;
try
NumberTwo = cell2mat(values(DateToSecondNumberMap, cellstr(Key)));
catch
NumberTwo = NaN;
end
WithNaNsCellArray{Index, 3} = NumberTwo;
end
WithoutNaNsCellArray = WithNaNsCellArray;
NaNIndicesVector = (isnan([WithNaNsCellArray{:,2}]) | isnan([WithNaNsCellArray{:,3}]));
WithoutNaNsCellArray(NaNIndicesVector == 1, :) = [];
然后WithNaNsCellArray
包含有NaN
行的结果并WithoutNaNsCellArray
包含没有NaN
行的结果。
WithNaNsCellArray =
'01/01/2010' [ 1] [ 4]
'02/01/2010' [ 2] [ 5]
'03/01/2010' [ 3] [NaN]
'04/01/2010' [NaN] [ 6]
'05/01/2010' [ 11] [ 7]
'06/01/2010' [ 17] [NaN]
WithoutNaNsCellArray =
'01/01/2010' [ 1] [4]
'02/01/2010' [ 2] [5]
'05/01/2010' [11] [7]