How to convert cell array to structure array
이전 댓글 표시
I would like to convert cell array to a structure 1x2 (or 2x1) with 3 fields with a1 as dimension/axis:
a1={'AA','AA','AA','BB','BB','BB','BB'}';
a2={'35000','96000','88000','33000','44000','8000','18000'}';
a3={'1a','1b','1c','1d','1e','1a','1b'}';
a123=[a1,a2,a3];
rowHeadings = {'first', 'second', 'third'};
but this does not work:
depts = cell2struct(a123, rowHeadings, 1)
Error using cell2struct
Unknown command option.
댓글 수: 7
Geoff Hayes
2015년 6월 13일
Aleksander - which version of MATLAB are you using? If I try the above, on R2014a, and change the depts initialization to
depts = cell2struct(a123', rowHeadings, 1)
then it works fine, with
depts =
7x1 struct array with fields:
first
second
third
Note that the transpose of a123 is necessary since rowheadings is a 1x3 cell array, and so the first input to cell2struct must be a 3x7.
Aleksandar
2015년 6월 14일
Aleksandar
2015년 6월 14일
Geoff Hayes
2015년 6월 15일
Aleksander - please provide an example of how you would like the structure to appear. Also, what do you mean by a2 and a3 should be vectors instead? Aren't they already arrays?
Aleksandar
2015년 6월 15일
@Aleksandar: it looks like you are a bit confused about what structures can do. Structures are not really categorization tools, nor are they dictionaries (which might look similar to what you wrote above). Like most traditional MATLAB data classes the dimensions of a structure do not encode any meta-data, so you cannot "name" the dimensions of a 1x2 structure 'AA' and 'BB', atleast not as meta-data in the structure itself. It would be possible to either:
- create a separate array containing this data, or
- include this meta-data as data withing the structure (see my answer below).
- use another data class: it seems like you might really be looking for something more like a table. Have you looked at using one?
Vahab Youssofzadeh
2016년 7월 22일
Try the following:
table2struct(cell2table(.))
채택된 답변
추가 답변 (1개)
a1 = {'AA','AA','AA','BB','BB','BB','BB'}';
a2 = {'35000','96000','88000','33000','44000','8000','18000'}';
a3 = {'1a','1b','1c','1d','1e','1a','1b'}';
hdr = {'first', 'second', 'third'};
fun = @(x)arrayfun(@(s)x(strcmp(s,a1)), unique(a1,'stable'), 'UniformOutput',false);
X = struct(hdr{1},fun(a1), hdr{2},fun(a2), hdr{3},fun(a3));
Now lets check it in the command window:
>> X
X =
2x1 struct array with fields:
first
second
third
>> X.first
ans =
'AA'
'AA'
'AA'
ans =
'BB'
'BB'
'BB'
'BB'
>> X.second
ans =
'35000'
'96000'
'88000'
ans =
'33000'
'44000'
'8000'
'18000'
댓글 수: 2
Aleksandar
2015년 6월 15일
Stephen23
2016년 7월 23일
"I suppose it refers to both answers"
No, it doesn't. You can vote for other answers though.
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!