Есть несколько возможных проблем с вашим подходом: во-первых, индексация Matlab отличается от индексации в стиле c в таблицы. myCell{i}{j}
- это j-й элемент массива ячеек, который содержится в i-м элементе массива ячеек myCell
. Если вы хотите индексировать в массив двухмерных ячеек, вы получите содержимое элемента в строке i, столбце j как myCell{i,j}
.
Если столбцы 2–9 вашего CSV-файла содержат все числовые данные, может быть гораздо удобнее использовать либо массив 1D-ячеек с записью для каждой хромосомы, либо использовать двумерный или трехмерный числовой массив, если Вы получите для каждой хромосомы одну строку или таблицу соответственно.
Вот один из способов сделать это
%# convert chromosomes to numbers
chromosomes = B{1};
chromosomes = strrep(chromosomes,'X',25);
chromosomes = strrep(chromosomes,'Y',26);
tmp = regexp(chromsomes,'chr(\d+)','tokens','once');
cnum = cellfun(@(x)str2double(x{1}),tmp);
%# catenate the rest of B into a 2D cell array
allNumbers = cell2mat(cat(2,B{2:end}));
%# now we can make a table with [chromosomeNumber,allOtherNumbers]
finalTable = [chromosomeNumber,allNumbers]
%# alternatively, if there are multiple entries for each chromosome, we can
%# group the data in a cell array, so that the i-th entry corresponds to chr.i
%# for readability, use a loop
outputCell = cell(26,1); %# assume 26 chromosomes
for i=1:26
outputCell{i} = allNumbers(cnum==i,:);
end