«В этом коде есть некоторые ошибки» - не самая большая проблема, вы должны начать с того, что +
не определен так, как вы думаете для символьных массивов.
Этот код с использованием strjoin
и unique
должен делать то, что вы хотите ....
uNames = unique(tbl.name); % Get unique names
c = cell( numel(uNames), 2 ); % Set up output (we'll turn this into a table later)
for ii = 1:numel(uNames)
c{ii,1} = uNames{ii}; % Assign the name to 1st column
% Join all strings in the 'nums' column, with a comma between them, when the
% value in the names column is equal to uNames{ii}
c{ii,2} = strjoin( tbl.nums( strcmp( tbl.name, uNames{ii} ) ).', ',' );
end
tblOut = cell2table( c, 'VariableNames', {'name','nums'} );
Если вы хотите, чтобы в строках были только уникальные элементы, вам нужно будет использовать strsplit
для разделения на запятые, а затем соединиться вместе после вызова unique
... Заменить строку c{ii,2} = ...
со следующим:
vals = tbl.nums( strcmp( tbl.name, uNames{ii} ) ).'; % Get nums for this name
vals = cellfun( @(str)strsplit(str,','), vals, 'uni', 0 ); % Split all on ','
% Join the list of unique values back together.
% Could use 'stable' argument of unique for order preservation.
c{ii,2} = strjoin( unique( [vals{:}] ), ',' );
Примечание: все было бы намного проще, если бы вы сохранили список чисел как массив фактических чисел, а не как массив символов!