Split array of sensor data by indexing

조회 수: 1 (최근 30일)
Eric
Eric 2020년 10월 20일
댓글: Eric 2020년 10월 20일
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
Stephen23
Stephen23 2020년 10월 20일
편집: Stephen23 2020년 10월 20일
"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 2020년 10월 20일
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!

댓글을 달려면 로그인하십시오.

채택된 답변

Stephen23
Stephen23 2020년 10월 20일
편집: Stephen23 2020년 10월 20일
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:

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by