Exporting non-rectangular cell array to delimited text file or excel spreadsheet
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi everyone,
I have a non-rectangular cell array in which I store data for a number of subjects across a number of conditions that I would like to export to excel (it will eventually be going to SPSS, but we are using excel as an intermediary, any advice on improving that is also welcome). The cell array currently looks like this
C =
{1x1 cell } {1x1 cell } {1x1 cell } {1x1 cell }
[6x1 double] [6x1 double] [6x1 double] [5x1 double]
Where C(1,:) = Column headers 'condition1', 'condition2' 'condition3', 'condition4'
and C(2,:) = data 'sub1-cond1', 'sub1-cond2' etc..
ideally I want to put the data for the rest of my subjects in this cell array such that C(2:n+1,:) = data for subjects 1:n. I would then liek to export this to some file so that I can import it into excel, ideally with some delimiter between each subject row so I can keep those seperate. The conditions will not always have the same number of data points for each subject, and cond4 will not always be the short condition, so there seems to be no way to store this data in a form more easily exportable.
Can anyone give me some advice on how I can export a cell array of this form (or something similar) so that I get my data in 4 columns with headers given by C(1,:) and my data given by C(2:n+1),:)? Any help would be much appreciated.
thanks, Jared
3 commentaires
Jan
le 27 Août 2013
@Jared: This means, you have e.g. this input:
C = {'Col1', 'Col2', 'Col3'; ...
1:4, 1:5, 1:6};
And you want something like this as output:
['Col1\t\t\tCol2\t\t\t\tCol3\t\t\t\t\t\n', ...
'1\t2\t3\t4\t1\t2\t3\t4\t5\t1\t2\t3\t4\t5\t6\t\n']
Does this match your needs?
Réponses (1)
Azzi Abdelmalek
le 26 Août 2013
% Example
a1=randi(9,6,1);
a2=randi(9,6,1);
a3=randi(9,6,1);
a4=randi(9,5,1);
c = {{'h1'} {'h2'} {'h3'} {'h4'};a1 a2 a3 a4}
%--------------------------------------------------
he=cellfun(@(x) x{:},c(1,:),'un',0);
val=c(2,:);
max_size=max(cellfun(@numel,val));
n_val=cell(6,numel(he));
for k=1:numel(he)
q=cell2mat(val(:,k));
n_val(1:numel(q),k)=num2cell(q);
end
new_cell=[he;n_val]
3 commentaires
Azzi Abdelmalek
le 26 Août 2013
you have 4 vectors (3 are 6x1 and one is 5x1). To create one cell array 6x6, we have to add an empty ([]) cell to the last vector. That' what the code do. To export the result to an Excell file
xlswrite('yourfilename.xls',new_cell)
Voir également
Catégories
En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!