Split array of sensor data by indexing

3 views (last 30 days)
Eric
Eric on 20 Oct 2020
Commented: Eric on 20 Oct 2020
Hey all,
Beginner here. Searching for an effective, simple solution to a data prep problem.
I'm building a function to import sensor data (attached). It comes in unsorted, with column "name" as string type (e.g., 'Chest', 'Tib'). This is also mirrored in column "serial", which matches the serial number of that sensor. Other columns timestamp, accx, etc. correspond to one sample measured at that time by each sensor.
I want to automatically detect the unique sensor names (or serial), and then split the array and create a timetable for each sensor. Later, we need to upsample, filter, synchronize, and transform the data of each sensor independently, and I assume that this is simpler when these data are seperated.
I started with this
c=unique(Data.IMU.name)
But am having trouble creating a proper method of indexing or looping for complete this task. Any ideas?
Thanks.
  2 Comments
Stephen23
Stephen23 on 20 Oct 2020
Edited: Stephen23 on 20 Oct 2020
"I want to ... split the array and create a timetable for each sensor."
Why do you need to do that?
One of the benefits of using tables/timetables is the ability to group data and apply functions those groups:
Whilst it is certainly possible to split up your data into separate tables/timetables (e.g. in a cell array), most likely a much better use of MATLAB would be to just use the table functionality which lets you group and process data within the table. But it really depends on what you are going to do with this data, which so far you have not explained.
Eric
Eric on 20 Oct 2020
I added a line to my query - later, we need to upsample, filter, synchronize, and transform the data of each sensor independently, and I assume that this is simpler when these data are seperated.
I'm reading through that documentation you linked to- working on it, thanks!

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 20 Oct 2020
Edited: Stephen23 on 20 Oct 2020
S = load('matlab.mat');
T = S.Data.IMU;
G = findgroups(T.name);
C = arrayfun(@(g)T(g==G,:),1:max(G),'uni',0);
You can then trivially loop over the cells of C and do whatever processing you want:

More Answers (0)

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!