Sorting cell for only dublicate values
2 views (last 30 days)
Show older comments
Hi i have a cell containing strings which are only 3 characters. I wish to sort this cell so only values that appear twice or more will remain. I thought about using a logical array, and using fun2cell, but i cant seem to get it quite right.
3 Comments
dpb
on 25 Oct 2021
@Image Analyst, I'd think from the Q? that the output array for that sample input would be the null set; there are none that are repeated. I guess it's possible he means the letters inside the strings...
Indeed, we would need more definition to be precise.
Accepted Answer
dpb
on 25 Oct 2021
Edited: dpb
on 26 Oct 2021
Alternate approach to Jan's using features of categorical arrays (which the IDs logically are)
% some dummy data of the same type as the example -- convert to categorical
>> CID=categorical(sort(cellstr(strcat(char('A'+randi([0 2],10,1)),num2str(randi(5,10,1),'%02d')))));
>> CID
CID =
10×1 categorical array
A02
A03
A04
B02
B02
B02
C02
C02
C04
C04
>>
% The engine
c=categories(CID); % a list of the categories (unique list of IDs)
isG1=(countcats(CID)>1); % logical vector of those with >1 occurrences
ID=CID(ismember(CID,c(isG1))); % select those out of the total list
The above yields
>> ID
ID =
7×1 categorical array
B02
B02
B02
C02
C02
C04
C04
>>
which can be seen by inspection to be the duplicates in the original list.
More Answers (1)
Jan
on 25 Oct 2021
Is the input really a cell containging strings? Or a cell string? Ort a string array?
% Test data with a cell string:
data = sprintfc('%03d', randi([0, 100], 1, 100));
data = sort(data(isMultiple(data)))
function T = isMultiple(A)
[S, idx] = sort(A(:).');
if iscellstr(A)
m = [false, strcmp(S(1:nA - 1), S(2:nA))];
elseif isa(A, 'string')
m = [false, (S(1:nA - 1) == S(2:nA))];
else
error(['Jan:', mfilename, ':BadInputType'], ...
'Input type is not handled: %s', class(A));
end
ini = strfind(m, [false, true]);
m(ini) = true; % Mark 1st occurence in addition
T(idx) = m; % Restore original order
end
0 Comments
See Also
Categories
Find more on Data Import from MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!