2013-12-16 3 views
4

나는 이름이 적힌 df와 자격이되는 날짜가 있습니다. 시간에 따라 사람이 가지고있는 고유 한 elig_end_dates의 수를 나타내는 지표를 만들고 싶습니다. 여기 내 DF입니다 :ID 당 고유 값의 누적 횟수 R

여기
names date_of_claim elig_end_date 
1 tom 2010-01-01 2010-07-01 
2 tom 2010-05-04 2010-07-01 
3 tom 2010-06-01 2014-01-01 
4 tom 2010-10-10 2014-01-01 
5 mary 2010-03-01 2014-06-14 
6 mary 2010-05-01 2014-06-14 
7 mary 2010-08-01 2014-06-14 
8 mary 2010-11-01 2014-06-14 
9 mary 2011-01-01 2014-06-14 
10 john 2010-03-27 2011-03-01 
11 john 2010-07-01 2011-03-01 
12 john 2010-11-01 2011-03-01 
13 john 2011-02-01 2011-03-01 

내 원하는 출력된다

names date_of_claim elig_end_date obs 
1 tom 2010-01-01 2010-07-01 1 
2 tom 2010-05-04 2010-07-01 1 
3 tom 2010-06-01 2014-01-01 2 
4 tom 2010-10-10 2014-01-01 2 
5 mary 2010-03-01 2014-06-14 1 
6 mary 2010-05-01 2014-06-14 1 
7 mary 2010-08-01 2014-06-14 1 
8 mary 2010-11-01 2014-06-14 1 
9 mary 2011-01-01 2014-06-14 1 
10 john 2010-03-27 2011-03-01 1 
11 john 2010-07-01 2011-03-01 1 
12 john 2010-11-01 2011-03-01 1 
13 john 2011-02-01 2011-03-01 1 

나는이 게시물에 유용한 R: Count unique values by category을 발견하지만, DF에 포함되는 반대로 답변은 별도의 테이블로 주어진다.

df$ob = ave(df$elig_end_date, df$elig_end_date, FUN=seq_along) 

을하지만이 수를 생성하고, 나는 정말 표시기를 원하는 :

나는 또한이 시도했다.

은 사전에 감사

(오른쪽 코드가 아닙니다 - 단지 학습 포인트로 게시) 스티븐 코드의 제품 또 다른 가능성 ave 사용

names date_of_claim elig_end_date ob 
1 tom 2010-01-01 2010-07-01 2 
2 tom 2010-05-04 2010-07-01 2 
3 tom 2010-06-01 2014-01-01 2 
4 tom 2010-10-10 2014-01-01 2 
5 mary 2010-03-01 2014-06-14 5 
6 mary 2010-05-01 2014-06-14 5 
7 mary 2010-08-01 2014-06-14 5 
8 mary 2010-11-01 2014-06-14 5 
9 mary 2011-01-01 2014-06-14 5 
10 john 2010-03-27 2011-03-01 4 
11 john 2010-07-01 2011-03-01 4 
12 john 2010-11-01 2011-03-01 4 
13 john 2011-02-01 2011-03-01 4 
+0

안녕하세요 - 빠른 답변을 올렸지 만 elig_end_date의 고유 한 값이 잘못 표시되어 예를 들어 혼란 스럽습니다. ??? 나는 오해 했습니까? –

+0

위 코드 출력을 볼 수 있도록 게시합니다. 입력에 다시 한 번 감사드립니다! ;) – user2363642

+0

그러면 원하는 출력 예제에서 Tom이 1,1,2,2를 얻은 이유는 무엇입니까? –

답변

5

:

df$obs <- with(df, ave(elig_end_date, names, 
         FUN = function(x) cumsum(!duplicated(x)))) 

# names date_of_claim elig_end_date obs 
# 1 tom 2010-01-01 2010-07-01 1 
# 2 tom 2010-05-04 2010-07-01 1 
# 3 tom 2010-06-01 2014-01-01 2 
# 4 tom 2010-10-10 2014-01-01 2 
# 5 mary 2010-03-01 2014-06-14 1 
# 6 mary 2010-05-01 2014-06-14 1 
# 7 mary 2010-08-01 2014-06-14 1 
# 8 mary 2010-11-01 2014-06-14 1 
# 9 mary 2011-01-01 2014-06-14 1 
# 10 john 2010-03-27 2011-03-01 1 
# 11 john 2010-07-01 2011-03-01 1 
# 12 john 2010-11-01 2011-03-01 1 
# 13 john 2011-02-01 2011-03-01 1 
+0

정말 고마워요. – user2363642