2016-09-12 4 views
0

У меня есть таблица размером 2775x2, с текстом только:объединяющие линии в категориальной переменной с MATLAB

'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 видов приматов, то же самое в обоих colunms), Я хотел бы построить новую таблицу размером 111x2, где каждая строка указывает наиболее частую категорию (для обоих столбцов) для каждого блока из 25 строк (l1-> l25, затем l26-> l50, затем l51-> l75. .. -> l2775). Почему 111? Потому что 111 = 2775/25. Любая идея о том, как действовать? Спасибо заранее !!

+0

что вы пробовали? Проверьте такие функции, как 'unique' или' histogram' или 'strcmp', а затем вернитесь. –

ответ

0

Вот что я хотел бы предложить.

  1. Получить текст из таблицы в массив ячеек
  2. Перерисуйте массив ячеек до 111 строк (и 50 столбцов) и конвертировать в categorical
  3. Найти mode для каждого столбца

Вот некоторый код для генерации выборочных данных и демонстрационной версии:

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 
+0

спасибо! хорошая идея сначала изменить таблицу. Затем, используя функцию «mode», я должен иметь возможность извлекать наиболее частую категорию в каждом столбце. – Julien

+0

'mode' - хорошее предложение для получения наиболее частого элемента, я потерялся, отвечая и использую' grpstats' вместо этого. Обновит мой ответ –