用MATLAB在分类变量中汇总行

时间:2016-09-12 13:44:07

标签: matlab format frequency contingency

我有一张大小为2775x2的表格,只有文字:

'Papio cynocephalus'      'Papio cynocephalus'  
'Cercopithecus kandti'    'Papio cynocephalus'  
'Papio cynocephalus'      'Human in vivo'       
'Papio cynocephalus'      'Papio cynocephalus'  
'Gorilla beringei'        'Papio cynocephalus'  
'Papio cynocephalus'      'Gorilla gorilla'       
'Papio cynocephalus'      'Human in vivo'       
'Papio cynocephalus'      'Papio cynocephalus'
...

总的来说,有5种不同的类别(= 5种灵长类动物,两种类型都相同), 我想建立一个大小为111x2的新表,其中每一行表示25行(l1-> 125,然后l26-> 150,然后l51->的每个块的最常见类别(对于两列)。 l75 ... - > l2775)。为什么111?因为111 = 2775/25。 知道怎么办吗?非常感谢提前!!

1 个答案:

答案 0 :(得分:0)

这是我的建议。

  1. 将表格中的文字转换为单元格数组
  2. 将单元格数组重新整形为111行(和50列)并转换为categorical
  3. 查找每列的mode
  4. 以下是一些生成示例数据和演示的代码:

    names = {'Alpha','Beta','Gamma','Delta','Echo'}';
    A = names(randi(5,2775,1));
    B = names(randi(5,2775,1));
    txtTable = table(A,B); % This is the kind of table you have
    

    现在将txtTable转换为单元格数组以进行整形并将单元格数组转换为categorical

    textsWide = categorical(reshape(table2cell(txtTable),25,[]));
    mostFrequent = mode(textsWide,2); % Find mode in each column