I have a character vector with repeated elements and want to extract each element once and at the sequence of appearance.
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi all,
I have a character vector with repeated elements and want to extract each element once, at the sequence of appearance in the original file. I am attaching an example file. In fact, I need to get:
Group Frontal_L Ins_Cing_L etc..
I guess I will have to use regexp but not very experienced with this functionality. Any ideas very welcome.
0 Kommentare
Akzeptierte Antwort
dpb
am 17 Aug. 2018
Bearbeitet: dpb
am 18 Aug. 2018
[unames,ia,iu]=unique(strtrim(cellstr(Getcurvenames)),'stable');
unames will be the names that are unique in the overall list,
unames=Getcurvenames(ia); % ia is location vector in original list Getcurvenames
Getcurvenames=unames(iu); % rebuild the original from the indices in unique list
unames will be cellstr list of names, much more conveniently handled than are fixed-length char arrays.
ADDENDUM
I forgot about the request for initial order in the output; use the 'stable' option as shown above. To not return the group string, make a slight modification to eliminate it first --
cnames=strtrim(cellstr(Getcurvenames)); % convert to trimmed cellstr
cnames=cnames(~contains(cnames,'Group')); % keep only those ~='Group'
[unames,ia,iu]=unique(cnames)),'stable'); % and the unique list of those
3 Kommentare
dpb
am 17 Aug. 2018
Don't know what you did differently, works fine here--
>> [u,ia,iu]=unique(strtrim(cellstr(Getcurvenames)));
>> u
u =
15×1 cell array
{'Central_L' }
{'Central_R' }
{'Frontal_L' }
{'Frontal_R' }
{'Group' }
{'In Mask' }
{'Ins_Cing_L' }
{'Ins_Cing_R' }
{'Occipital_L' }
{'Occipital_R' }
{'Parietal_L' }
{'Parietal_R' }
{'Posterior_all'}
{'Temporal_L' }
{'Temporal_R' }
>>
Returning a single character is characteristic of still dealing with char() arrays that are just 2D arrays of bytes and not using the trailing : to address the full array; hence the conversion to cellstr() that addresses the full cell.
unique does return the unique values in sorted order by default, there is the 'stable' optional order input to return in discovered order if that's what's wanted--
>> [u,ia,iu]=unique(strtrim(cellstr(Getcurvenames)),'stable');
>> u
u =
15×1 cell array
{'Group' }
{'Frontal_L' }
{'Ins_Cing_L' }
{'Temporal_L' }
{'Occipital_L' }
{'Parietal_L' }
{'Central_L' }
{'Frontal_R' }
{'Ins_Cing_R' }
{'Temporal_R' }
{'Occipital_R' }
{'Parietal_R' }
{'Central_R' }
{'Posterior_all'}
{'In Mask' }
>>
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!