Error in appliying split apply

5 次查看(过去 30 天)
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 个评论
Akira Agata
Akira Agata 2019-6-26
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 2019-6-26
编辑:Skydriver 2019-6-26
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');

请先登录,再进行评论。

采纳的回答

Mil Shastri
Mil Shastri 2019-10-12
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 个评论
Christoper Angelo Malayan
Is there a way for splitapply to SKIP this missing number and proceed to the next?
Walter Roberson
Walter Roberson 2021-1-10
No.
You can use findgroups on your current non-consecutive numbers.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Preprocessing 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by