matlab中字符串数组与同一字符串的组合

matlab中字符串数组与同一字符串的组合,matlab,Matlab,另一个可能的问题是 给定一个字符串数组 M = [a b 011 10 001 10 112 4 015 2 086 1 117 1 121 2] 正如您所看到的,这些值是字符串而不是数字, 所以我想组合具有相同字符串的行,例如011和001具有相同的b,即10,因此这就是我想要的输出: T = [a b 011,001 10,10

另一个可能的问题是

给定一个字符串数组

M = [a      b
    011     10
    001     10
    112      4
    015      2
    086      1
    117      1
    121      2]
正如您所看到的,这些值是字符串而不是数字, 所以我想组合具有相同字符串的行,例如011和001具有相同的b,即10,因此这就是我想要的输出:

 T = [a        b
    011,001    10,10
    112        4
    015,121    2,2
    086,117    1,1]
正如您再次看到的,011和001合并它们在同一个单元格中以及086和117中,我想要一个输出,当您复制并粘贴到word 011和001或所有合并字符串时,必须显示该输出,如果您使用n x 2字符串数组呢 这意味着您不知道数组的行大小。
那有可能吗?谢谢

我的策略是将字符串转换为单元格。以下是一个解决方案:

% --- Define M
M = [sprintf('%s\t%s\n', 'a', 'b') ...
    sprintf('%s\t%s\n', '011', '10') ...
    sprintf('%s\t%s\n', '001', '10') ...
    sprintf('%s\t%s\n', '112', '4') ...
    sprintf('%s\t%s\n', '015', '2') ...
    sprintf('%s\t%s\n', '086', '1') ...
    sprintf('%s\t%s\n', '117', '1') ...
    sprintf('%s\t%s\n', '121', '2')]

% --- Convert into cells
tmp = textscan(M, '%s\t%s\n');
C1 = tmp{1};            % First column
C2 = tmp{2};            % Second column

% --- Group

% Get unique values of the second column
UV = unique(C2, 'stable');

% Prepare result columns
R1 = {};
R2 = {};

% Group
for i = 1:numel(UV)

    b = ismember(C2, UV{i});
    R1{i,1} = strjoin(C1(b), ',');
    R2{i,1} = strjoin(C2(b), ',');

end

% --- Convert the result to a string
Res = '';
for i = 1:numel(R1)
    Res = [Res sprintf('%s\t%s\n', R1{i}, R2{i})];
end
Res
字符串则包含:

Res =

086,117 1,1
011,001 10,10
015,121 2,2
112 4
a   b
这不完全是您想要的输出,因为它没有排序。如果要对输出进行排序,请精确说明标准


编辑

我更正了代码,使输出按照输入的第二列定义的顺序显示。
unique
'stable'
参数起了作用

现在输出为:

Res =

a        b
011,001  10,10
112      4
015,121  2,2
086,117  1,1

由于015和121在第二列中的值为2,是否有原因未在输出中分组?很抱歉,它们应该包括在内,我将对其进行编辑。请定义正确的顺序。它是按字母顺序排列的还是初始出现顺序?它是否也适用于n x 2数组?我的意思是,它是一个通用代码?谢谢。在Matlab中可以使用n×2数组字符串数组,但这不是您正在使用的。你能确定输入的类别吗?
class(M)
的输出是什么?我的意思是输出的顺序请检查我的问题编辑的代码给出了一个错误:使用strjoin(第52行)的错误第一个输入必须是字符串的1xN单元格数组。res(第29行)R1{i,1}=strjoin(C1(b),',')中的错误;