MATLAB: Copying variables from table to struct based on certain criteria -
i have table
column1data = [11; 22; 33]; column2data = [44; 55; 66]; column3data = [77; 88; 99]; rows = {'name1', 'name2', 'name3'}; t = table(column1data, column2data, column3data); t.properties.rownames = rows column1data column2data column3data name1 11 44 77 name2 22 55 88 name3 33 66 99
and struct array
s(1).rownamefield = 'name3'; s(2).rownamefield = 'name1'; s(3).rownamefield = 'name2'; s(1).columnnumberfield = 1; s(2).columnnumberfield = 3; s(3).columnnumberfield = 2; s(1).field3 = []; s(2).field3 = []; s(3).field3 = []; rownamefield columnnumberfield field3 1 'name3' 1 [] 2 'name1' 3 [] 3 'name2' 2 []
the struct array s
contains criteria needed pick variable table t
. once variable picked, has copied table t
empty field in struct s
.
s(1).rownamefield
contains name of row in table t
target variable resides. s(1).columnnumberfield
contains number of column in table t
target variable. s(1).rownamefield
plus s(1).columnnumberfield
practically coordinates of target variable in table t
. need copy target variable table t
field3 in struct array: s(1).field3
. has done structs might need in loop, not sure.
the output should this:
rownamefield columnnumberfield field3 1 'name3' 1 33 2 'name1' 3 77 3 'name2' 2 55
i have no idea how approach task. is, of course, simplified version of problem. real data table 200x200 , struct array has on 2000 structs. appreciate this.
% extract table data , linearly index tdata = t{:,:}; [~,row] = ismember({s.rownamefield}, t.properties.rownames); col = [s.columnnumberfield]; pos = sub2ind(size(tdata),rowpos, col); val = tdata(pos); % assign struct ii = 1:numel(s) s(ii).field3 = val(ii); end
instead of for-loop, can use suever's solution deal()
assign values in 1 go (have num2cell(val)
first). whatever faster , more intuitive.
Comments
Post a Comment