MATLAB中的文件名匹配

时间:2017-05-27 18:34:49

标签: matlab

我在MATLAB中加载了带有常用标签的文件列表。

  label   filename   A   B
   1       xxx       6
   1       xxx       2
   1       xxx       3
   2       yyy       1
   2       yyy       4
   3       zzz       6
   3       zzz       7

我有以下方式的另一批文件:

 filename     A      B
   yyy        1
   yyy        4
   aaa        2
   aaa        4
   aaa        6
   aaa        10
   zzz        6
   zzz        7

我需要匹配第1组和第2组中的文件名,并为设置2(数字)分配相同的标签。匹配标签的目的是set_1中的标签在每个文件名的A列中具有最大值。现在在类似的战争中我需要找到set_2中每个文件名的最大值是否与set_2匹配。 有什么建议?

2 个答案:

答案 0 :(得分:0)

这与" VLookUp"相同。在excel中。您可以使用ismember

  [finder, indx] = ismember(Set2(:, 1), Set1(:, 2));

%Label will be in the 3rd column of Set2 (pre-allocation is needed):
  Set2(finder, 3) = Set1(indx(finder), 1); 

答案 1 :(得分:0)

如果您想要比较两个数据集之间与给定文件关联的最大值,则可以放弃在这种情况下担心标签。我将在此处使用您问题中的两个示例数据集(假设这些数据为tablesyour last question}:

T1 = table([1; 1; 1; 2; 2; 3; 3], ...
           {'xxx'; 'xxx'; 'xxx'; 'yyy'; 'yyy'; 'zzz'; 'zzz'}, ...
           [6; 2; 3; 1; 4; 6; 7], ...
           'VariableNames', {'Label', 'Filename', 'A'});
T2 = table({'yyy'; 'yyy'; 'aaa'; 'aaa'; 'aaa'; 'aaa'; 'zzz'; 'zzz'}, ...
           [1; 4; 2; 4; 6; 10; 6; 7], ...
           'VariableNames', {'Filename', 'A'});

首先,您可以使用intersect获取两个表共有的文件列表。然后使用ismember查找每个集合中常用文件的索引,用于累积值并使用accumarray查找最大值:

commonFiles = intersect(T1.Filename, T2.Filename);

[index, accumIndex] = ismember(T1.Filename, commonFiles);
max1 = accumarray(accumIndex(index), T1.A(index), [], @max);  % Max values for set 1

[index, accumIndex] = ismember(T2.Filename, commonFiles);
max2 = accumarray(accumIndex(index), T2.A(index), [], @max);  % Max values for set 2

现在我们可以使用表格来显示数据:

T3 = table(commonFiles, max1, max2);

T3 = 

    commonFiles    max1    max2
    ___________    ____    ____

    'yyy'          4       4   
    'zzz'          7       7

在此示例中,两个集合中的每个文件的最大值相同。如果你只想专注于不同的那些,你可以这样做:

index = (max1 ~= max2);  % Index of differing maxima
T3 = table(commonFiles(index), max1(index), max2(index));