私はいくつかの列に値が繰り返された単純な行列を持っています。私は名前と週ごとにデータをグループ化し、毎週与えられた毎日の料金を合計する必要があります。ここでの例です:Matlabでのグループ化と要約
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
はそれを行うための良い方法はありますか?私は、ループのために使用されますが、確かではない、それはそれを行うための最善の方法である:
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
単一文字の変数名やコメントの欠如の組み合わせは従って、あなたのコードは非常に困難にします。変数名を展開してコードの意図をコメントできますか? –