Computing the median of a group except one member
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
wy6622
am 13 Feb. 2019
Kommentiert: wy6622
am 14 Feb. 2019
I have a dataset of a variable x for S seasons of the same J firms (not ordered). I'd like to compute for each firm in each season, the median of all other firms in that season. e.g. S=2, J=6, my dataset is
M=[1 2 3 6 5 4 2 3 4 1 5 6; 1 1 1 1 1 1 2 2 2 2 2 2; 2 4 6 5 7 8 3 7 5 7 5 3]'
First column is the firm index, second column the season, third column the x values for each firm in each season.
I am thinking something like
for i=1:size(M,1)/6
for j=6*i-5:6*i
M(j,4)=median(M(6*i-5:6*i,3));
end
end
but with the index of M(:,3) inside median() somehow telling MATLAB to exclude the jth entry of M(:,3)?
Thank you!
8 Kommentare
madhan ravi
am 14 Feb. 2019
ok did you get the answer to your question since you accepted the answer ?
Akzeptierte Antwort
Kevin Phung
am 14 Feb. 2019
Hello!
Is this sort of what you're looking for?
M=[1 2 3 6 5 4 2 3 4 1 5 6; 1 1 1 1 1 1 2 2 2 2 2 2; 2 4 6 5 7 8 3 7 5 7 5 3]';
num_seasons = unique(M(:,2)); %num of seasons
num_f = unique(M(:,1)); %num of firms
for i = 1:numel(num_seasons) % for each season...
season = M(M(:,2) == num_seasons(i),:); %matrix of season being iterated
for j = 1:numel(num_f) % for each firm...
med = median(season(not(season(:,1)==num_f(j)),3)); %median of OTHER firms for the season
disp(['Firm: ' num2str(num_f(j)) ' Season:' num2str(num_seasons(i)),...
' Median: ' num2str(med)]);
end
end
6 Kommentare
Kevin Phung
am 14 Feb. 2019
Just for the sake of following up with my mistake:
I made the mistake of converting the values into strings. row should have been:
row = all(M(:,[1 2])==[num_f(j) num_seasons(i)],2); %locate row where firm and season matches
so this should have worked:
M=[1 2 3 6 5 4 2 3 4 1 5 6; 1 1 1 1 1 1 2 2 2 2 2 2; 2 4 6 5 7 8 3 7 5 7 5 3]';
M(:,4)=0; %create column of zeros
num_seasons = unique(M(:,2)); %num of seasons
num_f = unique(M(:,1)); %num of firms
for i = 1:numel(num_seasons) % for each season...
season = M(M(:,2) == num_seasons(i),:); %matrix of season being iterated
for j = 1:numel(num_f) % for each firm...
med = median(season(not(season(:,1)==num_f(j)),3)); %median of OTHER firms for the season
row = all(M(:,[1 2])==[num_f(j) num_seasons(i)],2); %locate row where firm and season matches
M(row,4) = med; %append the median to the corresponding row, 4th col
end
end
use whichever method works best for you
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Descriptive Statistics finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!