创建新的变量,用于识别Matlab中代码中的更改

时间:2014-07-20 18:17:32

标签: matlab double match cell

我有double matrix B {1998} C1C2代码(不重复)。每个C2都会在C3中获得一个值。

%   C1      C2   C3
B=[ 1998    22   37 
1998    34    7
1998    76    12
1998    98    29
1998    107   14    
…]

这就是我B的方式:

N1=[N{:,1} N{:,2} N{:,3}];
N1=unique(N1(:,1:3),'rows'); 
N3= unique(N1(:,1:2),'rows'); 
for m=1:size(N3,1)
    N3(m,3)=sum(N1(:,1) == N3(m,1) & N1(:,2)==N3(m,2));
end
B=N3((N3(:,1) == 1998),:);

我有一个cell-array A,其中年份在R1中水平分布,Y中的未重复值,以及后面的列中的相应代码。 代码与变量C2B的代码相匹配。

A={Y  1996 1997 1998 1999  %R1
1   107 107 22  22  
13  98  98  76  1267 
… }

我是否有办法获得一个新变量来识别变量A中代码的变化,并在C3中显示B中的相应值?例如:

AB={Y Initial C2 Change C2
1   107 14  22  37
13  98  29  76  12 }

1 个答案:

答案 0 :(得分:0)

AB = {'Y' 'Initial' 'C2' 'Change' 'C2'}; % initialize result cell array

for i=2:size(A,1) % loop through rows of A

   indicesOfChanges = find(diff([A{i,2:end}])); % find changes in row

   for j=1:length(indicesOfChanges) % for all changes look up the corresponding values
       ind1=find(B(:,2)==A{i,indicesOfChanges(j)+1}); % row index in B of value before change
       ind2=find(B(:,2)==A{i,indicesOfChanges(j)+2}); % row index in B of value after change
       AB{end+1,1} = A{i,1};
       AB{end,2} = B(ind1,2);  
       AB{end,3} = B(ind1,3); 
       AB{end,4} = B(ind2,2); 
       AB{end,5} = B(ind2,3);
   end

end

使用矢量化方法可能会进一步改善这种情况,但只要您的数组不是太大,它就应该使用循环足够快。