sum of consecutive months value in an array

조회 수: 1 (최근 30일)
Poulomi Ganguli
Poulomi Ganguli 2018년 9월 11일
댓글: Poulomi Ganguli 2018년 9월 11일
Hello: I have an array where the first, second and third columns show year, month and values. I need to sum the values of consecutive months. The matrix X is as below
1988 6 223.12
1994 7 1033.0
1994 8 464.67
1995 9 251.33
1997 6 121.41
1997 8 624.58
1999 9 221.60
2001 7 782.04
The desired output:
1988 223.12
1994 1497.67
1995 251.33
1997 121.41
1997 624.58
1999 221.60
2001 782.04
I have tried like this:
dt = datetime([X(:,1:2), repmat([0 0 0 0],length(X),1)]);
Monthgroup = cumsum([1; months(diff(datetime([X(:,1:2), repmat([0 0 0 0],length(X),1)]))) == 1]);
where same year with a different month, example, 1994 in this case, will suppose to show a common index but I am getting some error. Based on this common index, could I use accumarray function? Any help will be appreciated. Thanks,
  댓글 수: 2
jonas
jonas 2018년 9월 11일
I guess it needs to work for any number of consecutive months?
Poulomi Ganguli
Poulomi Ganguli 2018년 9월 11일
yes but for the same year not for different years.

댓글을 달려면 로그인하십시오.

채택된 답변

Andrei Bobrov
Andrei Bobrov 2018년 9월 11일
편집: Andrei Bobrov 2018년 9월 11일
a = [1988 6 223.12
1994 7 1033.0
1994 8 464.67
1995 9 251.33
1997 6 121.41
1997 8 624.58
1999 9 221.60
2001 7 782.04 ];
b = datetime(a(:,1),a(:,2),1);
lo = [true; b(1:end-1) + calmonths(1) ~= b(2:end)];
out = [a(lo,1), accumarray(cumsum(lo),a(:,3))];
or
b2 = a(:,1:2)*[12;1];
lo2 = [true;diff(b2) ~= 1];
out2 = [a(lo2,1), accumarray(cumsum(lo2),a(:,3))];
  댓글 수: 6
Rik
Rik 2018년 9월 11일
If you want to merge them, use either of the methods Andrei posted, if not, use the adapted code I posted in my comment. Which is the correct version for you depends on your application.
Poulomi Ganguli
Poulomi Ganguli 2018년 9월 11일
Thanks! Now it's clear.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by