MATLAB Answers


taking multiple column to form a struct

Asked by Sharah
on 21 Dec 2015
Latest activity Commented on by Guillaume
on 21 Dec 2015
hello, I have a data set from text file, which is a 1x 13 size file. first I diff the data only to take the value of the data from clumn 13 (the counter) when it increases (some have repeated same numbers).
DataCube = textscan(D, '%f %f %f %f %f %f %f %f %f %f %f %f %f', 'HeaderLines', 13);
f = [true;diff(DataCube{1,13})~=0];
then when I try to extract the rest of the data into a struct such that:
Kid(1).Force{1,1:6} = DataCube{:, 1:6}(f==1);
the result returns: Expected one output from a curly brace or dot indexing expression, but there were 6 results. apart from extracting them individually, how else can I extract them in one go?


Sign in to comment.

1 Answer

Answer by Guillaume
on 21 Dec 2015

First, f==1 is a no-op, it's exactly the same as f.
Note that DataCube{:, 1:6} returns 6*number or rows individual values, so you would need as many output variables. It's probably not what you wanted to do. Possibly, this is what you wanted to do:
Kid.Force = DataCube(f, 1:6);
This will store the cell array only for those rows where f is true into a single field of your structure.
I looks like you're a bit confused by cell array syntax. My advice is to drop the cell array by converting it straight away to matrix, since it only holds scalar numerics:
DataCube = cell2mat(textscan(D, '%f %f %f %f %f %f %f %f %f %f %f %f %f', 'HeaderLines', 13));
f = [true;diff(DataCube(:,13))~=0]; %did you make a typo and replace : with 1?


i need the value of f when it is not equal to 0.
the solution still doesnt solve the problem of
Kid(subject).Force{trial,1:6} = DataCube(f, 1:6);
this is put in a double for loop, there are 6 components of force and i want to put them in different struct so that i can reach each data by Kid(1).Force{1, 2} for force 2 trial 1 kid 1
f is already logical (0s and 1s), so comparing it to 1 returns the exact same values: 0==1 -> 0, 1==1 -> 1
I do not understand what you're trying to do with your Force{trial, 1:6}. It looks like you are trying to distribute your 6 columns of the cell array to 6 columns of the Force field, but at the same time, f is likely to select several rows which you are trying to put into a single row (trial).
What in your DataCube cell array corresponds to a given force or trial?

Sign in to comment.