MATLAB Answers


How do I create variable names from string variables

Asked by selena
on 12 Aug 2013
If I have 2 variables, ID has a column of strings like 'height' or 'speed', data has a column of corresponding variables.
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.
height = 10;10;7
speed = 2.4;2.1


Sign in to comment.

2 Answers

Answer by Matt Kindig on 12 Aug 2013
Edited by Matt Kindig on 12 Aug 2013
 Accepted Answer

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
vars.height; %height variables
vars.speed; %speed variables


Thanks, how would I assign a date stamp to the variables?
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.

Sign in to comment.

Answer by Andrei Bobrov
on 13 Aug 2013
Edited by Andrei Bobrov
on 13 Aug 2013

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 Comment

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.

Sign in to comment.