我有一个包含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的第三列复制正确的值,因为它不考虑重复。
有人可以帮忙吗?
答案 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] []