Split and count unique string in cell array
12 ビュー (過去 30 日間)
古いコメントを表示
I have a cell array in the form of:
A =
B25
A35
L35 J23
K32 I25
B25 ...
where cetain elements repeat. I need to count how many unique elements there are and then list number of occurences of each element. For the above example it would be something like:
B25 ... 2
L35 ... 1
K32 ... 1 etc.
I tried using different combinations of strplit, regexp and unique, but some returned errors, others returned an array with the whole row counted as unique, so for the example above it would say there are 4 unique elements instead of 6 because L35 J23 is counted as 1, not 2. There is a hint that converting to categorical might help, but I am not sure how to utilize its functions in order to get the desired result.
0 件のコメント
採用された回答
Stephen23
2022 年 3 月 25 日
A = {'B25';'A35';'L35 J23';'K32 I25';'B25'};
B = regexp(A,'\S+','match');
T = cell2table([B{:}].');
S = groupsummary(T,'Var1')
その他の回答 (2 件)
Mohammed Hamaidi
2022 年 3 月 25 日
A loop solution:
C=unique(A);nc=length(C);
B=char(A);nb=length(B);
D=zeros(nc,1);
for i=1:nc
for j=1:nb
if strcmp(B(j,:),char(C{i}))
D(i)=D(i)+1;
end
end
end
for i=1:nc
disp([char(C{i}) ' ' num2str(D(i))])
end
Simon Chan
2022 年 3 月 25 日
Use function groupsummary
A = {'B25';'A35';'L35 J23';'K32 I25';'B25'};
T = table(A);
groupsummary(T,'A')
3 件のコメント
Simon Chan
2022 年 3 月 25 日
Just add a few things as follows:
A = {'B25';'A35';'L35 J23';'K32 I25';'B25'; 'L35 J10'};
B = cellfun(@(x) strsplit(x),A,'uni',0); % Split them
C = cat(2,B{:})'; % Combine as a column
T = table(C);
groupsummary(T,'C')
参考
カテゴリ
Help Center および File Exchange で Characters and Strings についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!