如何从表中选择一行,然后将其添加到另一个表中

时间:2019-04-13 10:58:03

标签: matlab

伙计们,我有以下两个矩阵。我想将第一矩阵的第二列与第二矩阵的第一列进行比较。如果它们相同,我想将该行复制到另一个矩阵。我在下面举了一个例子。非常感谢。

  Matrix 1                               Matrix 2 
3323    918                     918 2   12  13
2522    842                     918 2   9   13
3049    918                     918 2   6   13
1143    40                      918 2   3   1
204     1                       842 2   3   8
1663    362                     842 3   12  9
2079    362                     842 3   9   3
770     1                       40  3   9   6
2189    842                     40  3   6   9
                                40  3   3   5

Expected Result
918 2   12  13
918 2   9   13
918 2   6   13
918 2   3   1
842 2   3   8
842 3   12  9
842 3   9   3
918 2   12  13
918 2   9   13
918 2   6   13
918 2   3   1
40  3   9   6
40  3   6   9
40  3   3   5
842 2   3   8
842 3   12  9
842 3   9   3

1 个答案:

答案 0 :(得分:0)

由于生成result_Matrix(称为RM)的方法有点描述性,因此该方法也会有些复杂。首先,您必须分析Marix 2(我将其称为M2)。您可以使用简单的循环:

i=1;
M2_indexes=[1];
for idx=1:size(M2)
    if M2(idx)~=M2(M2_indexes(i))
        M2_indexes=[M2_indexes, idx];
        i=i+1;
    end
end
M2_indexes=[M2_indexes,(size(M2,1)+1)];

现在您的程序知道值在[1 5 8]处变化,并且矩阵范围内的最后一个索引为[11]。现在是迭代遍历M1的时候了。这与上一步非常相似: MR = [];

for idx=1:size(M1)
    for idy=1:size(M2_indexes,2)
        if M2(M2_indexes(idy))==M1(idx,2)
            MR=[MR; M2(M2_indexes(idy):(M2_indexes(idy+1)-1),1:4)];
        end
    end
end

结果如您所描述:

MR =

   918     2    12    13
   918     2     9    13
   918     2     6    13
   918     2     3     1
   842     2     3     8
   842     3    12     9
   842     3     9     3
   918     2    12    13
   918     2     9    13
   918     2     6    13
   918     2     3     1
    40     3     9     6
    40     3     6     9
    40     3     3     5
   842     2     3     8
   842     3    12     9
   842     3     9     3