いくつかの列に値が繰り返されている単純な行列があります。データを名前と週でグループ化し、特定の週に毎日費やした価格を合計する必要があります。次に例を示します。
name day week price
John 12 12 200
John 14 12 70
John 25 13 150
John 1 14 10
Ann 13 12 100
Ann 15 12 100
Ann 20 13 50
必要な出力は次のとおりです。
name week sum
John 12 270
John 13 150
John 14 10
Ann 12 200
Ann 13 50
それを行うための良い方法はありますか?forループを使用しましたが、それが最善の方法かどうかはわかりません。
names= unique(data(:,1)); % getting unique names from data
n=size(names, 1); % number of unique names
m=size(data(:,1),1); % number of total rows
sum=[]; % empty matrix for writing the results
for i = 1:n
temp=[]; % creating temporar matrix
k=1;
for j=1:m
if name(i)==data(j,1) % going through all the rows and getting the rows of
temp(k,:)=data(j,:); % the same name and putting in temporar matrix
k=k+1;
end
end
count=0;
s=1;
for l = 1:size(temp,1)-1 % going through temporar matrix of one name(e.g.John)
if temp(l,3)==temp(l+1,3) % checking if the day of current row is equal to the
count=count+temp(l,4); % date of the next row (the data is sorted by name
else % and date) and then summing the prices 4th column
sum(s, 1:3)=[names(i) temp(l,3) count];
count=0; % if the days are not equal, then writing the answer
s=s+1; % to the output matrix sum
end
end
end