Clear Filters
Clear Filters

How can I divide a dataset into trials using a specific delimiter?

1 view (last 30 days)
Hello,
I have a dataset of eye-tracking data that looks like so:
Time X Y
192 15 NaN
499 609 519
499 608 519
. . .
. . .
. . .
1200 800 NaN
1201 750 600
. . .
. . .
. . .
2000 792 NaN
All lines between 2 consecutive NaNs correspond to a trial, I would like to create a cell array where each cell contains all the rows from one trial. Can you help me on how to procede?
Thank you

Accepted Answer

Walter Roberson
Walter Roberson on 18 Jun 2015
nanpos = find(isnan(YourData(:,3))]);
nanruns = diff([1 nanpos size(Yourdata,1)]);
blocks = cell2mat(YourData, nanruns, size(YourData,2));
blocks( cellfun(@isempty, blocks) ) = [];
Each of the blocks in the cell array will now start with a NaN entry, except in the case where the first entry in the array did not have a NaN, in which case the first block will include all the entries before the first NaN. Only the first block has that possibility.
If the last entry in the array is a NaN entry then the last block will be that entry by itself. I did it this way, instead of deleting the NaN, in case the NaN entry has some useful information you want to extract.
  3 Comments

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!