Matlab中的重复组合计数 我们考虑以下情况,例如细胞矩阵A: A: A(:,1)A(:,2) A(:,3) A(:,4) A(:,5) 'CM' '00118''000151' '19970303''19970729' 'RO' '01356''043605' '19970212''19970401' 'CM' '01464''000151' '19970121''19970218' 'RO' '01356''043605' '19970119''19970313' 'CM' '00118''043605' '19970114''19970219' 'CM' '00118''000151' '19970523''19970728'

Matlab中的重复组合计数 我们考虑以下情况,例如细胞矩阵A: A: A(:,1)A(:,2) A(:,3) A(:,4) A(:,5) 'CM' '00118''000151' '19970303''19970729' 'RO' '01356''043605' '19970212''19970401' 'CM' '01464''000151' '19970121''19970218' 'RO' '01356''043605' '19970119''19970313' 'CM' '00118''043605' '19970114''19970219' 'CM' '00118''000151' '19970523''19970728',matlab,match,cell,Matlab,Match,Cell,在前三列中,字符串和值都被合并并沿矩阵重复 我想创建一个新专栏 REP = num2cell(REP); A(:,end+1) = REP; 这将对应于每个匹配A(:,1)的A(:,3)的重复次数。例如,本例的输出为: Output for A: A(:,1) A(:,2) A(:,3) A(:,4) A(:,5) REP 'CM' '00118''000151' '19970303''19970729''3' 'RO' '01356''043605' '19

在前三列中,字符串和值都被合并并沿矩阵重复

我想创建一个新专栏

REP = num2cell(REP);
A(:,end+1) = REP;
这将对应于每个匹配A(:,1)的A(:,3)的重复次数。例如,本例的输出为:

Output for A:
A(:,1) A(:,2) A(:,3)   A(:,4)    A(:,5)   REP        
'CM'  '00118''000151' '19970303''19970729''3'
'RO'  '01356''043605' '19970212''19970401''2'   
'CM'  '01464''000151' '19970121''19970218''3' 
'RO'  '01356''043605' '19970119''19970313''2' 
'CM'  '00118''043605' '19970114''19970219''1' 
'CM'  '00118''000151' '19970523''19970728''3'
如果您尝试以下方法:

    clear all
    clc

    A = cell(6,6);
    % I replicate only the relevant part of your cell array.
    A(:,1) = {'CM' 'RO' 'CM' 'RO' 'CM' 'CM'};
    A(:,3) = {'000151' '043605' '000151' '043605' '043605' '000151'}; 


    % Concatenate strings to easily compare them afterwards.
    ConcatString = cell(size(A,1),1);
    for i = 1:size(A,1)    
        ConcatString{i} = strcat(A{i,1},num2str(A{i,3}));    
    end

    REP = zeros(size(A,1),1);

   for i = 1:size(A,1)   

   Match = strcmp(ConcatString{i}, ConcatString) % Get logical array, '1' represents match.   

   NumRep = size(find(Match ==1),1) % Number of repetitions

   REP(Match ==1) = NumRep % Enter # of repetitions in REP

   end
    A(:,6) = num2cell(REP);

    disp(A)
这就给了我:

'CM'    []    '000151'    []    []    [3]
'RO'    []    '043605'    []    []    [2]
'CM'    []    '000151'    []    []    [3]
'RO'    []    '043605'    []    []    [2]
'CM'    []    '043605'    []    []    [1]
'CM'    []    '000151'    []    []    [3]

这有点粗糙,但我想你可以用你的数据来填补空白

对于两列中的每一列,使用将字符串转换为唯一的数字标签。然后使用(也可以使用)计算每个标签组合的重复次数:

在您的示例中,假设输入为

A = {'CM'    '00118'    '000151'    '19970303'    '19970729'    
     'RO'    '01356'    '043605'    '19970212'    '19970401'    
     'CM'    '01464'    '000151'    '19970121'    '19970218'    
     'RO'    '01356'    '043605'    '19970119'    '19970313'    
     'CM'    '00118'    '043605'    '19970114'    '19970219'    
     'CM'    '00118'    '000151'    '19970523'    '19970728'};
代码生成

REP =
     3
     2
     3
     2
     1
     3

A = 
    'CM'    '00118'    '000151'    '19970303'    '19970729'    '3'
    'RO'    '01356'    '043605'    '19970212'    '19970401'    '2'
    'CM'    '01464'    '000151'    '19970121'    '19970218'    '3'
    'RO'    '01356'    '043605'    '19970119'    '19970313'    '2'
    'CM'    '00118'    '043605'    '19970114'    '19970219'    '1'
    'CM'    '00118'    '000151'    '19970523'    '19970728'    '3'

谢谢你的帮助!代码的第二行给出了以下错误:
使用cell/unique时出错(第86行)输入A必须是字符串的单元格数组。
我猜这是因为A(:,3)是一个只包含数字的列?@user3557054我不确定
A的单元格中有哪些数据。从你的帖子看来,它们都是字符串(即使这些字符串描述了数字),这就是我的假设;请参见编辑的中的示例answer@user3557054如果第3列是数字,而不是字符串,请使用
[~,~,uuu3]=unique([A{:,3}.]);%//获取独特的标签
感谢您的帮助。代码工作正常,但我仍然必须检查它是否正是我所寻找的。我会让你知道的!谢谢:)
REP =
     3
     2
     3
     2
     1
     3

A = 
    'CM'    '00118'    '000151'    '19970303'    '19970729'    '3'
    'RO'    '01356'    '043605'    '19970212'    '19970401'    '2'
    'CM'    '01464'    '000151'    '19970121'    '19970218'    '3'
    'RO'    '01356'    '043605'    '19970119'    '19970313'    '2'
    'CM'    '00118'    '043605'    '19970114'    '19970219'    '1'
    'CM'    '00118'    '000151'    '19970523'    '19970728'    '3'