根据Matlab中的条件将列附加到单元格

时间:2014-08-13 16:14:02

标签: matlab match cell

我有一个包含500000行和3列的单元格类型变量A.例如:

A={1994 'AACE'  2071
1994    'AACE'  30677
1994    'AAC'   1541
1994    'AACCU' 2027 …}

第二个单元格类型变量B,包含100000行和3列。例如:

B={1994 'AA'    31
1994    'AAC'   4
1994    'AACE'  2
1994    'AADV'  4
1994    'AAIC'  8}

如果 A和B的第2列匹配,我希望添加到 的第3列的值。所以我的新A将是:

A={1994 'AACE'  2071 2
1994    'AACE'  30677 2
1994    'AAC'   1541 4
1994    'AACU'  2027 [] …}

这就是我的尝试:

[c,d]=ismember(B(:,2),A(:,2))
A(nonzeros(d),4)=num2cell(B(c,3));

它不会给出错误,但它没有给出正确的解决方案。此代码不仅不会从B的第三列复制正确的值,因为它不考虑重复。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

我认为你的意思是"追加"而不是"添加"。

首先,我会向A追加一列。它将是第4列,每个单元格最初都是空的。

A(:,4) = {[]};

接下来,仅考虑A和B的第2列,找到A中具有B值的任何行。

[locA,locB] = ismember(A(:,2), B(:,2))

最后,替换值:

A(logical(locA),4) = B(locB(locB>0),3);

A = 

    [1994]    'AACE'     [ 2071]    [2]
    [1994]    'AACE'     [30677]    [2]
    [1994]    'AAC'      [ 1541]    [4]
    [1994]    'AACCU'    [ 2027]     []