Create a Matrix from a cell array

3 ビュー (過去 30 日間)
Thimiod Athan
Thimiod Athan 2016 年 9 月 22 日
編集済み: Stephen23 2016 年 9 月 22 日

Hello

I want to create a matrix from a cell with the below:

cell(1,1)='Value,Rooms,Cleanliness,Service'	  
cell(1,2)='2 of 5 stars,2 of 5 stars,4 of 5 stars,2 of 5 stars' 
cell(2,1)='Value,Location,Sleep Quality,Rooms,Cleanliness,Service'   
cell(2,2)='5 of 5 stars,5 of 5 stars,5 of 5 stars,5 of 5 stars,5 of 5 stars,5 of 5 stars' 
cell(3,1)='Location,Rooms,Cleanliness,Service'	cell(3,2)='4 of 5 stars,1 of 5 stars,3 of 5 stars,4 of 5 stars' 

etc

I want to combine each characteristic for example location with each rating for example in cell(2,2) is 5 in cell(3,2) is 4. This ratings should be at the same column. If the rating doesn't appear for example the location in the first raw the matrix will take the number 10.

Do you have any ideas?

Thank you.

  1 件のコメント
Stephen23
Stephen23 2016 年 9 月 22 日
編集済み: Stephen23 2016 年 9 月 22 日
This might be answered best by improving how this data is imported into MATLAB, as textscan or importdata might be able to do this quite easily. Are those data imported from a file?

サインインしてコメントする。

採用された回答

Guillaume
Guillaume 2016 年 9 月 22 日
Your post is not very clear, not help with the fact that your example does not use valid matlab syntax. Possibly, that's what you want:
ratings = {'Value,Rooms,Cleanliness,Service', '2 of 5 stars,2 of 5 stars,4 of 5 stars,2 of 5 stars'; ...
'Value,Location,Sleep Quality,Rooms,Cleanliness,Service', '5 of 5 stars,5 of 5 stars,5 of 5 stars,5 of 5 stars,5 of 5 stars,5 of 5 stars'; ...
'Location,Rooms,Cleanliness,Service', '4 of 5 stars,1 of 5 stars,3 of 5 stars,4 of 5 stars'}
%The above is not a very useful way to store data, so split it:
ratinglabels = cellfun(@(r) strsplit(r, ','), ratings(:, 1), 'UniformOutput', false);
ratingscores = cellfun(@(r) str2double(regexp(r, '\d+(?= of)', 'match')), ratings(:, 2), 'UniformOutput', false); %extract score
%get unique labels, and mapping between original array and label column:
[labels, ~, destinationcolumn] = unique([ratinglabels{:}]);
%get row destination for each score:
destinationrow = repelem(1:size(ratings, 1), cellfun(@numel, ratingscores))';
%create output matrix and fill with score. Default value if score is missing is NaN:
scores = nan(size(ratings, 1), numel(labels));
scores(sub2ind(size(scores), destinationrow, destinationcolumn)) = [ratingscores{:}];
%pretty display:
scores = array2table(scores, 'VariableNames', matlab.lang.makeValidName(labels))
%export to excel:
writetable(scores, 'someexcelfile.xlsx');

その他の回答 (1 件)

Image Analyst
Image Analyst 2016 年 9 月 22 日
A 2-D cell array (like you have) is a matrix. It's a matrix of cells. Just define your cells differently if you want the things in between the commas to be in different cells.
  1 件のコメント
Thimiod Athan
Thimiod Athan 2016 年 9 月 22 日
編集済み: Thimiod Athan 2016 年 9 月 22 日
My mistake, I want to create a matrix in excel. The cell is like the picture

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by