我有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
谢谢。
答案 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