Error in appliying split apply

12 views (last 30 days)
Skydriver
Skydriver on 9 Jun 2019
Commented: Walter Roberson on 10 Jan 2021
I have a problem using splitapply for function mean.
Error using splitapply (line 111)
For N groups, every integer between 1 and N must occur at least once in the vector of group numbers.
Error in try_31032019 (line 65)
LPInew = splitapply(@mean,LPI,bins_index);
G1 = findgroups(amax2);
bins_index = discretize(G1,amaxgrid);
LPInew = splitapply(@mean,LPI,bins_index);
CSR_new = splitapply(@mean,CSR,bins_index);
constN1_60_new = splitapply(@mean,N1_60,bins_index);
constFC_new = splitapply(@mean,Const,bins_index);
Is there any one can help me to solve my problem?
  7 Comments
Akira Agata
Akira Agata on 26 Jun 2019
What you intended to do in your code is not clear for me. For example, I'm not sure how to fix the following 3 lines:
amaxgrid = linspace(0.19,0.42,36);
G1 = findgroups(amax);
bins_index = discretize(G1,amaxgrid);
Looking at your data file G1 should be integer 1~7, since amax consists of 7 different values. On the otherhand, amaxgrid becomes 1-by-36 double array between 0.19~0.42.
So I have no idea what you intended to do in the 3rd line. Could you tell us more details on what kind of calculation shall be done on your data?
Skydriver
Skydriver on 26 Jun 2019
Edited: Skydriver on 26 Jun 2019
I want to develop 3d figure with x absis is amaxgrid, y ordinat is Mw grid and to match with the z like state bellow. In further I have to decided that QL should be representing in the z direction with matrix of grid as 36 * 7. Yess I have small mistake to decide 7 not 8.
with this coding:
Mwgrid = linspace(4.75,8.25,7);
amaxgrid = linspace(0.19,0.42,36);
grid = meshgrid(Mwgrid,amaxgrid);
QL_new_1 =zeros(size(grid));
for i=1:length(LPInew)
for j=1:length(Mwgrid)
QL_new_1(i,j) = Coeff(1) + Coeff(2)*constN1_60 + Coeff(3).*constFC + ...
Coeff(4).*log(LPInew(i)) + Coeff(5).*log(Mwgrid(j)) + Coeff(6).*log(constDi);
end
end
QL_zeroes=QL_new_1; % import
QL_zeroes(QL_zeroes<0)=0; % import
PL = normcdf(QL_zeroes); % import
[Xq_cond1,Yq_cond1] = meshgrid(linspace(min(Mwgrid),max(Mwgrid),8),linspace(min(amaxgrid),max(amaxgrid),36)); %import
Vq_cond1 = interp2(Mwgrid, amaxgrid, PL,Xq_cond1,Yq_cond1,'cubic');
Vq_cond2 = interp2(Mwgrid, amaxgrid, PL_new,Xq_cond1,Yq_cond1,'cubic')
figure(4)
surf(Xq_cond1, Yq_cond1, Vq_cond1)
hold on
xlim([4.75 7.6])
xlabel('Magnitude (Mw)');
ylim([0 3])
ylabel('Ground Surface Acceleration (a_{max})');
zlim([0 1])
zlabel('Conditional probability of a_{max} and Mw');

Sign in to comment.

Accepted Answer

Mil Shastri
Mil Shastri on 12 Oct 2019
The group numbers provided to splitapply need to be every integer between 1 to N. For example:
This will work:
splitapply(@mean,1:5,[2,2,3,1,1])
and this will not because the group number 3 is missing:
splitapply(@mean,1:5,[2,2,4,1,1])
  2 Comments
Christoper Angelo Malayan
Christoper Angelo Malayan on 10 Jan 2021
Is there a way for splitapply to SKIP this missing number and proceed to the next?
Walter Roberson
Walter Roberson on 10 Jan 2021
No.
You can use findgroups on your current non-consecutive numbers.

Sign in to comment.

More Answers (0)

Categories

Find more on Dialog Boxes in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!