跟踪Matlab中单元格的变化

时间:2014-04-27 15:05:01

标签: matlab

我有一个包含3个不同列的单元格。第一个是简单的排名,第二个是由X个元素组成的代码,第三个是由Y个元素组成的代码,对于第二列中的某个数字组合通常是相同的。因此,如果在第二列中你有数字345,那么在第三列你可能总是有798.事情是有时它会改变。所以我所拥有的是:

1 453 4789

1 56 229

1 453 1246 %here the corresponding code has changed

2 43 31

2 453 1246 %here the code did not change

3 56 31 %here the corresponding code has changed (it was 229 previously)

最后我想要的是一个带有三列的新单元格,只能说明观察到第三列代码(对应于代码形成第二列)的情况。例如,在这个简单的例子中,我会得到:

1 453 1246

3 56 31

1 个答案:

答案 0 :(得分:0)

假设值在矩阵中,这是一个可能的解决方案:

CJ2 = [1 453 4789
     1 56  229
     1 453 1246
     2 43  31
     2 453 1246
     3 56  31];

changes = zeros(size(CJ2));
nChanges = 0;
for i = 2:size(CJ2,1)
    pos = find(CJ2(1:i-1,2) == CJ2(i,2), 1, 'last');
    if ~isempty(pos) && CJ2(pos,3) ~= CJ2(i,3)
        nChanges = nChanges + 1;
        changes(nChanges, :) = CJ2(i,:);
    end
end
changes = changes(1:nChanges, :);

changes

结果:

>> changes

changes = 

       1         453        1246
       3          56          31