How to split divide an array on specific sections?

18 views (last 30 days)
I have a double array of dimension (10000,5), the first column of the array is an ID going from 1-10. The other 4 columns are the related data. I'm trying to create individual arrays based on each ID value and the quantity of each ID can vary with respect to each other.
%For example:
%CA is the vector with the data =(ID,DATA1,DATA2,DATA3,DATA4)
%ID goes from 1-10
%The first array should be GC1=(1,DATA1,DATA2,DATA3,DATA4) with "x" number of rows
%I have tried to make this code work but I don't know what's wrong? I have a loop to create 11 array GC(id), although i now is not recommended.
k =size(ID,1); %size of vector, size of data base
x=0;
jl=1;
CAA=zeros(k,1);
CAA=CA(:,1); %extraction of the ID column from CA
for id=1:10
for i=jl:k
if CAA(i,1)==1
x=x+1;
else
GC(id)=zeros(x,5);
GC(id)=CAA(jl:x,5);
end
end
end

Accepted Answer

Sebastian Castro
Sebastian Castro on 16 Aug 2017
Edited: Sebastian Castro on 16 Aug 2017
You can do this with logical indexing. Say, for example, you want to grab the data whose ID corresponds to 5:
% Generate dummy data
% First column is a random number 1-10
data = [randi(10,100,1) rand(100,4)];
% Extract the data from those with ID #5
subset5 = data(data(:,1)==5,:);
- Sebastian
  3 Comments
Jorge Rodriguez
Jorge Rodriguez on 16 Aug 2017
Sebastian, do you know id there is a way to create the vector subset in a loop. In other words subset(i)? this is just in case the ID varies from more than 1 to 10? Thanks

Sign in to comment.

More Answers (1)

Andrei Bobrov
Andrei Bobrov on 16 Aug 2017
GC = accumarray(data(:,1),(1:size(data,1))',[],@(x){data(x,:)});

Products

Community Treasure Hunt

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

Start Hunting!