如果不同变量的元素在Matlab中匹配,则创建新变量

时间:2014-08-05 11:42:26

标签: matlab match cell

我有3个单元格数组:A有3列和5000行。 B有5列和60列。 C有4列500行。每个变量的样本:

A= { 12 1999    41.2
     13 1999    47.7
     16 1999    52.7}

B= { 16 452 8   407 31
   1037 110 14  873 93
   1255 881 20  16  69}

C= { 13 1997    1999    2000
    141 1997    1999    2000
    174 1997    1999    2000}

如果A的第1列的值与B的第1列的任何值匹配,我想添加到A的第1列,第4列和第5列加上一列只有值'一个& #39; 。如果A的第1列的值与C的第1列的值匹配,我想添加到A,C的第1列和第4列以及带有零的额外列。

所以输出结果为:

Output= { 12    1999    41.2
          13    1999    47.7  13 2000 0    %match between A & C 
          16    1999    52.7  16 407 31 1} %match between A & B

谢谢。

1 个答案:

答案 0 :(得分:2)

它可能不是最优雅也不是最快的解决方案,但我认为它可以完成工作。它假设该值只能在B或C中,但不能同时在两者中(因为不清楚当时会做什么)。

Bcol1 = [B{:,1}];
Ccol1 = [C{:,1}];
for r = 1:size(A,1)
    a = A{r,1};
    [inB, rowB] = ismember(a, Bcol1);
        if inB
            A{r, 4} = a;
            A{r, 5} = B{rowB,4};
            A{r, 6} = B{rowB,5};
            A{r, 7} = 1; 
        else  % not in B, maybe it is in C?
            [inC, rowC] = ismember(a, Ccol1);
            if inC
                A{r, 4} = a;
                A{r, 5} = C{rowC,4};
                A{r, 6} = 0;
            end
        end
end

哦,它改变了A,如果你需要A保持不变,只需从A的副本开始并修改它(而不是A本身)。 最好, NRAS