MATLAB Answers

0

organising large sets of data into a irregular matrix

Asked by judith schweimer on 7 Mar 2019
Latest activity Answered by judith schweimer on 13 Mar 2019
Hello,
I have a large data sets with of 40000+ samples, which are organised in 2 columns. The first colum tells me a cluster-number (column 1) by which I would like to sort, and the second a value is a time which I would like to allocated to the individual clusters.
the data looks something like:
A=[32 7.83425
32 8.0074
5 8.01005
5 8.0119
5 8.10775
19 8.1082
7 8.1085
4 8.1089]
I would like to organise this set into a matrix or table. One caveat is that the clusters are different sizes.
I have managed to get the individual cluster number out of my matrix, using the unique function.
I thought this would be similar to this thread:
https://uk.mathworks.com/matlabcentral/answers/19877-organizing-data-into-a-matrix-generating-a-matrix
However I am struggling to assign the values to the clusters because of the irregular number of values per cluster.
Can someone help me with this?

  0 Comments

Sign in to comment.

Products


Release

R2018a

2 Answers

Answer by Jos (10584)
on 7 Mar 2019
 Accepted Answer

You can use cell arrays for this.
A=[ 32 7.83425
32 8.0074
5 8.01005
5 8.0119
5 8.10775
19 8.1082
7 8.1085
4 8.1089 ]
[unA, ~, j] = unique(A(:,1)) ;
C = accumarray(j, A(:,2), [numel(unA),1], @(x) {x})
% The cell C{k} contains all values that belong to unA(k)
However, for some purposes you can also use a matlab table, for which dedicated functions, like splitapply, exist to operate on groups. This may worthy of some exploration on your site ...

  4 Comments

Show 1 older comment
I think you're better off writing to a text file. An option:
C = {[1 2 3], 1, [1 2 3 4]} % some test data
myfile = 'myfile.txt' ;
dlmwrite(myfile ,reshape(C{1},1,[]))
for k=2:size(C,1),
dlmwrite(myfile , reshape(C{k},1,[]), '-append') ;
end
Almost perfect, I just need to switch columns and rows of the myfile, I will try this later, else I have trouble importing the data into Excel due to too long rows.
Thank you very much!
You're welcome :-)
Switching to column orientation inside the text file might not be trivial though. As you need to re-arrange the values between the cells of C.
You might also be interested in xlswrite, btw.

Sign in to comment.


Answer by judith schweimer on 13 Mar 2019

The xlswrite function did the trick! It took me a while to get it to work, but now I am happy! So simple!
myfile = '*.xlsx' ;
for k=1:size(C,1)
xlswrite(myfile ,reshape(C{k},[],1),k);
end
Thanks again, Jos!

  0 Comments

Sign in to comment.