MATLAB: Adjusting the loop (help needed)

loop adjustment

I have a large dataset and the following is a sample of it. The first column contains unique numbers while the second and third columns represnet the variables of interest.
dat = [4 32 24;
4 67 33;
4 80 40;
4 90 70;
9 22 10;
9 42 15;
9 52 30;
9 60 40]
I wrote the following code to caluclate the mean of the variables of interest for each unique number.
dat1=unique(dat(:,1))
datfinal = zeros(length(dat1),3)
datfinal(:,1)=dat1
for idx=1:length(dat1)
datfinal(idx,2)=mean(dat(dat(:,1)==dat1(idx),2))
datfinal(idx,3)=mean(dat(dat(:,1)==dat1(idx),3))
end
The code works and gives what I want but I am struggling in adjusting the loop to calculate the correlation coefficient (corr2) between columns 2 and 3 for each unqiue number separately. The result should be as follows
corr=[4 0.8243;
9 0.9293]
I appreciate your help.

Best Answer

Everything including finding the mean can be done in just three lines of code using findgroups and splitapply:
g = findgroups(dat(:, 1));
datmean = splitapply(@mean, dat, g)
datcorr = splitapply(@(rows) [rows(1) corr2(rows(:, 2), rows(:, 3))], dat, g)
edit: fixed missing closing bracket