% raw_data matrix containing x, y, x, y, ... columns
new_data(:,1) = raw_data(:,1:2:end);
new_data(:,2) = raw_data(:,2:2:end);
% removing NaN values and sorting in ascending order
sort_data = sortrows(rmmissing(new_data));
% removing x-value duplicates, reduced matrix, unique with a small
% tolerance (it needs to be included)
[a,index] = uniquetol(sort_data(:,1));
% saving unique values into first column of uniqueMat
uniqueMat(:,1) = a;
% adding an extra row to index
index(length(index)+1) = length(sort_data)+1;
% filling the uniqueMat matrix with 0 and y-values
for i = 1:length(uniqueMat)
uniqueMat(i,(index(i)+1):index(i+1)) = sort_data(index(i):index(i+1)-1,2);
end
[R,S] = size(uniqueMat);
% picking up only the 2:S columns due to the possible 0 in the first column
X = uniqueMat(:,2:S);
% all elements of X equal to 0 will be converted to NaN
X(X == 0) = NaN;
% first column of uniqueMat filled with unique x-values
uniqueMat(:,1) = a;
% all other columns filled with y-values and NaN
uniqueMat(:,2:S) = X;
% creating final_data matrix filled with NaN
final_data = NaN(R,S);
% counting cells of uniqueMat which doesn't contain NaN with logical isnan
for i = 1:R
num_val(i,1) = S-sum(isnan(uniqueMat(i,:)));
final_data(i,1:num_val(i)) = rmmissing(uniqueMat(i,:));
end
% cropping the final_data matrix
final_data = final_data(:,1:max(num_val));