필터 지우기
필터 지우기

How to assing incrementing numbers to identical values in a column?

조회 수: 1 (최근 30일)
Hello to all,
my ultimate goal of this question is to find a solution for the following problem: I am searching for the index of the first and last day of a month of one year specifically. To specify my question here a design of my data :
Column 1(Year) Column 2(Month) Column 3(Data)
1990 1 .098
1990 1 .99
1990 1 .34
1990 2 .56
1990 2 .44
In this example my answer would be IndexBeginning = 1 and IndexEnding= 3 for month 1 of the year 1990 and IndexBeginning = 4 and IndexEnding= 5 for month 2 of the year 1990.
To get specific values for a month and the respective years i have already merged the two first columns. January 1990, e.g., now has the designated number 19901 and February 1995 the number 19952. Now I´m trying to index those merged numbers from 1 to 293 ( number of month of my sample) in correct order so i can easily search for every month.
I´m very grateful for any and every idea!
with Kind Regards,
A Goeh

채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2016년 8월 22일
편집: Azzi Abdelmalek 2016년 8월 22일
M=[1990 1 .098;1990 1 .99;1990 1 .34;1990 2 .56;1990 2 .44]
[ii,jj,kk]=unique(M(:,1:2),'rows','stable')
out=[ii cell2mat(accumarray(kk,(1:numel(kk))',[],@(x) {[x(1) x(end)]}))]
  댓글 수: 1
A. Goeh
A. Goeh 2016년 8월 22일
Thank you very much!! It works perfectly and I wouldn´t have thought of such an elegant way of solving this problem.

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

추가 답변 (1개)

Andrei Bobrov
Andrei Bobrov 2016년 8월 22일
편집: Andrei Bobrov 2016년 8월 22일
M = [1990 1 .098;1990 1 .99;1990 1 .34;1990 2 .56;1990 2 .44];
[ii,jj] = unique(M(:,1:2),'rows','first');
[~,kk] = unique(M(:,1:2),'rows','last');
out = [ii,jj,kk];

카테고리

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

Community Treasure Hunt

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

Start Hunting!

Translated by