Exporting non-rectangular cell array to delimited text file or excel spreadsheet
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
Jan
2013-8-27
@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?
回答(1 个)
Azzi Abdelmalek
2013-8-26
% 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 个评论
Azzi Abdelmalek
2013-8-26
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)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!