How do I create variable names from string variables
2 ビュー (過去 30 日間)
古いコメントを表示
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
0 件のコメント
採用された回答
Matt Kindig
2013 年 8 月 12 日
編集済み: Matt Kindig
2013 年 8 月 12 日
If you can, avoid doing this. This explains why: http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop.3F
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 件のコメント
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
2013 年 8 月 13 日
編集済み: Andrei Bobrov
2013 年 8 月 13 日
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
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.
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!