Creating a Cell Array in for-loop to save parts of a data from a table data format

1 次查看(过去 30 天)
Hi,
I have a data set which is in a table data format. The dimensions of my data are 32256x25. The data basically has 576 trails per participant. Which means there are 56 participants. I want to segregate this data set and run a for-loop over it to get every participant in a separate cell array (i.e., a cell array called: participants = 1x56 and each cell should have 576x25).
Here is some code that I have tried:
k = [1:4, 11,14,15,23]; %idx of relavent cols
h = 576; % total trials per participant
tp = 1:56; %total num of participants
idx = h*tp;
% A non-loop way to index the data table and put it in a cell array
Ss_1 = ALLDATAfixed2(1:h, k);
Ss_2 = ALLDATAfixed2(idx(1)+1:idx(2), k);
Ss_3 = ALLDATAfixed2(idx(2)+1:idx(3), k);
Ss_4 = ALLDATAfixed2(idx(3)+1:idx(4), k);
participants = { ALLDATAfixed2(1:h, k), ALLDATAfixed2(idx(1)+1:idx(2), k), ALLDATAfixed2(idx(2)+1:idx(3), k),ALLDATAfixed2(idx(3)+1:idx(4), k)};
%==========================================================================================%
pp = cell(1, 56);
for kk = 1:56
for ii = 1:height(ALLDATAfixed2)
for jj = 1:length(idx)
Ss = ALLDATAfixed2([1:idx(jj), idx(jj)+1:idx(jj)], k);
tt {kk} = Ss;
end
end
end
It does not work as it gives me back a cell with 1x1 dim, and 1 cell with the whole data set back.
Help!
Thanks in advance.

采纳的回答

Ameer Hamza
Ameer Hamza 2020-4-12
You can use splitapply to partition your table without using for loops
t = array2table(rand(32256,25)); % random table replace it with your data
num_trials = 576;
num_participants = 56;
grps = repelem((1:num_participants)',num_trials,1);
split_data = splitapply(@(varargin) {[varargin{:}]}, t, grps);

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Tables 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by