2013-01-23 2 views
2

나는 다음과 같은 데이터 세트에 잠시 동안 사투를 벌인거야 : 나는 각 ID 비제 변수와 마지막 날짜에 출력하고 싶습니다R의 data.frame에서 하위 시퀀스의 마지막 날짜를 추출하는 방법은 무엇입니까?

id date  var1 var2  
1 7031 2008-12-01 27 1 
2 7031 2009-01-05 6 0 
3 7031 2009-02-02 0 3 
4 7031 2008-11-01 1 4 
5 7500 2009-07-11 30 0 
6 7500 2009-10-01 8 0 
7 7500 2010-01-01 0 0 
8 7041 2009-06-20 26 0 
9 7041 2009-08-01 0 0 
10 0277 2009-01-01 3 0 

. 이 사용자의 시계열은 길이가 다릅니다. 나는 다음과 같은 출력물을 기대한다 :

id last_date 
7031 2009-02-02 
7500 2009-10-01 
7041 2009-06-20 
0277 2009-01-01 

어떤 도움을 주시면 감사하겠습니다!

+1

가능한 중복의 [R에서 가장 큰 날짜 행을 꺼내] (http://stackoverflow.com/questions/14186005/take-out-the-row-with-largest -date-in-r) – thelatemail

+1

* * "var1"과 "var2"가 0과 같은지 또는 * "var1"과 "var2"가 0과 같은지 여부를 명확히 할 수 있습니까? – A5C1D2H2I1M1N2O1R2T1

+0

@thelatemail, 나는 귀하의 링크 된 질문이 * 중복이 아닌 복제 *라고 말할 것입니다. 이 질문은 별도의 그룹화 변수와 관련하여 가장 큰 날짜 인 반면, 그 자체 내에서 가장 큰 날짜에 더 많은 관련이 있습니다 (각 연도의 마지막 날짜를 원했습니다). 개념적으로 비슷하지만 여기에 두 가지 질문이있는 것이 유용 할 수 있습니다. – A5C1D2H2I1M1N2O1R2T1

답변

5

먼저, 데이터를 부분 집합, 다음 aggregate()를 사용

여기에 샘플 데이터입니다 :

x <- read.table(header = TRUE, stringsAsFactors=FALSE, text = " 
       id date  var1 var2  
       1 '7031' 2008-12-01 27 1 
       2 '7031' 2009-01-05 6 0 
       3 '7031' 2009-02-02 0 3 
       4 '7031' 2008-11-01 1 4 
       5 '7500' 2009-07-11 30 0 
       6 '7500' 2009-10-01 8 0 
       7 '7500' 2010-01-01 0 0 
       8 '7041' 2009-06-20 26 0 
       9 '7041' 2009-08-01 0 0 
       10 '0277' 2009-01-01 3 0") 

것은 당신의 "날짜"변수 값이 실제 날짜가 아닌 문자로 표시되어 있는지 확인합니다.

x$date <- as.Date(x$date) 

부분 집합 :

x2 <- with(x, x[!(var1 == 0 & var2 == 0), ]) 

집계 :

aggregate(date ~ id, x2, max) 
#  id  date 
# 1 277 2009-01-01 
# 2 7031 2009-02-02 
# 3 7041 2009-06-20 
# 4 7500 2009-10-01 

당신이 당신의 서브 세트 데이터의 새로운 객체를 생성하지 않은 경우, 당신은 또한 사용할 수 있습니다 aggregate(date ~ id, x[!(x$var1 == 0 & x$var2 == 0), ], max)

+0

대체 :'x2 <- subset (x, var1! = 0 | var2! = 0)'. 목적이 더 명확하게 제시되고 또한 짧아집니다. – MvG

+0

@MvG, 좋은 전화하지만'subset()'을 사용하는 습관을 버렸습니다. 그러나 당신의 생각은'['부분 집합으로 잘 작동 할 수 있습니다. 감사. – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto, 고마워요! 이것은 내가 필요한 것입니다. – Anna

관련 문제