如何比较表colum matlab中的文本字符串

时间:2017-04-12 13:09:21

标签: matlab compare detection string-comparison

如果我有一个N-by-1表colum,如何检测是否有任何行相同?

1 个答案:

答案 0 :(得分:0)

如果您只想确定是否存在重复行,则可以使用unique执行此操作。您可以检查列中唯一值的数量,并将其与同一列中的元素总数(numel)进行比较

tf = unique(t.Column) == numel(t.Column)

如果要确定哪些行是重复的,可以再次使用unique但使用第三个输出,然后使用accumarray计算每个行的出现次数值,然后选择那些出现多次的值。

[vals, ~, inds] = unique(t.Column, 'stable'); 
repeats = vals(accumarray(inds, 1) > 1);

% And to print them out:
fprintf('Duplicate value: %s\n', repeats{:})

如果你想要一个true / false的逻辑向量来存在重复项,你可以做类似于上面的事情

[vals, ~, inds] = unique(t.Column, 'stable');
result = ismember(inds, find(accumarray(inds, 1) > 1));

[vals, ~, inds] = unique(t.Column, 'stable');
result = sum(bsxfun(@eq, inds, inds.'), 2) > 1;

<强>更新

您可以结合上述两种方法来实现您的目标。

[vals, ~, inds] = unique(t.Column, 'stable'); 
repeats = vals(accumarray(inds, 1) > 1);

hasDupes = numel(repeats) > 0;

if hasDupes
    for k = 1:numel(repeats)
        fprintf('Duplicate value: %s\n', repeats{k});
        fprintf('   Found at: ');
        fprintf('%d ', find(strcmp(repeats{k}, t.Column)));
        fprintf('\n');
    end
end