How do I create variable names from string variables

If I have 2 variables, ID has a column of strings like 'height' or 'speed', data has a column of corresponding variables.
ie
ID = 'height' 'height' 'height' 'speed' 'speed'
data = 10;10;7;2.4;2.1
How do I create the variable 'height' and a variable speed with the corresponding data.
ie
height = 10;10;7
speed = 2.4;2.1

 採用された回答

Matt Kindig
Matt Kindig 2013 年 8 月 12 日
編集済み: Matt Kindig 2013 年 8 月 12 日

2 投票

Instead, make them fields of a structure. You can do something like this:
vars = struct(); %structure to hold your variables
ID = {'height' 'height' 'height' 'speed' 'speed'};
data = [10;10;7;2.4;2.1];
fields = unique(ID); %get variable names as field names
for k=1:length(fields), %for each unique variable
fld= fields{k}; %field name
tf = ismember(ID, fld); %which corresponding data
vars.(fld) = data(tf); %assign to field
end
vars.height; %height variables
vars.speed; %speed variables

2 件のコメント

selena
selena 2013 年 8 月 12 日
Thanks, how would I assign a date stamp to the variables?
Matt Kindig
Matt Kindig 2013 年 8 月 12 日
How do you mean? Do you have an additional field in 'ID' that is called 'date' or similar? I wrote this code to be extensible to an arbitrary set of fields, so I think that additional ID elements (with corresponding values in 'data') should work fine.

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

その他の回答 (1 件)

Andrei Bobrov
Andrei Bobrov 2013 年 8 月 13 日
編集済み: Andrei Bobrov 2013 年 8 月 13 日

1 投票

ID = {'height' 'height' 'height' 'speed' 'speed'};
data = [10;10;7;2.4;2.1];
[i0,i1,i1] = unique(ID);
vars = cell2struct(accumarray(i1(:),data(:),[],@(x){x}),i0,1);

1 件のコメント

Matt Kindig
Matt Kindig 2013 年 8 月 15 日
I should have figured there was an easy way to do this using accumarray. Try as I might, I still can't get the hang of that function.

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

カテゴリ

ヘルプ センター および File Exchange で Variables についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by