Find a series of consecutive numbers and change index of them
    조회 수: 13 (최근 30일)
  
       이전 댓글 표시
    
Hi, 
I have this kind of data. The first column and second column of the data refers to Index and time series(not consecutive) relatively.
Data = [1 1; 1 2; 1 3; 1 5; 1 6; 1 10; 1 11; 1 13; 1 20; 1 21; 1 22;];
 I'd like to change this index number using Matlab code(to apply to thousands of data) when the value of the second colmn is not consecutive numbers. 
So in my example, the first column should be changed [1; 1; 1; 2; 2; 3; 3; 4; 5; 5; 5;] .
If anyone can help, it would be greatly appreciated.
Thank you!
댓글 수: 0
채택된 답변
  the cyclist
      
      
 2019년 8월 12일
        
      편집: the cyclist
      
      
 2019년 8월 12일
  
      Data(:,1) = cumsum(diff([Data(1,2); Data(:,2)]) ~= 1);
will change the first column to what you want.
That's might be a bit "obfuscated" for you, but it is pretty straightforward to parse what is going on.
[Data(1,2); Data(:,2)]
is appending another copy of the first element at the front of the vector. I do that so that the first element of your vector will look non-consecutive to the "prior" one, and therefore be assigned index 1.
diff() ~= 1
is identifying the locations with non-consecutive jumps, putting a 1 there.
cumsum()
takes the cumulative sum along the vector, which means that each time a 1 is encountered, your index is incremented.
댓글 수: 0
추가 답변 (1개)
  Andrei Bobrov
      
      
 2019년 8월 12일
        [~,~,Data(:,1)] = unique(cumsum(Data(:,1)) - Data(:,2),'stable');
댓글 수: 0
참고 항목
카테고리
				Help Center 및 File Exchange에서 Time Series Events에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!