2011-11-24 2 views
1

형식 문자의 객체와 ...하는() 나는 너무 기본이 될 수있는 질문이 있지만, 여기있다

나는이 같은 데이터 집합에서 월별 데이터를 추출 할 :

Date  Obs 
1 2001-01-01 120 
2 2001-01-02 100 
3 2001-01-03 150 
4 2001-01-04 175 
5 2001-01-05 121 
6 2001-01-06 100 

난 그냥 특정 월 (예 : 월)이 데이터의 행을 얻으려면,이 완벽하게 작동합니다 : 그러나

output=which(strftime(dataset[,1],"%m")=="01",dataset[,1]) 

내가 변수를 사용하여 모든 달을 통해 갈 루프를 만들려고 일 at 선언 된 문자가 작동하지 않으며 "거짓"만 가져옵니다. 내가 k 있으리라 믿고있어

value=as.character(k) 
output=which(strftime(dataset[,1],"%m")==value,dataset[,1]) 

답변

4

아니요 문자열을 구문 분석하십시오. 너무 오류가 발생하기 쉽습니다. 날짜를 날짜로 파싱하고 이들을 논리적으로 비교합니다. 여기

3 월 데이터와 월을 만드는 한 가지 방법 인 비교를 기반으로 2 월 하위 설정 : XTS로

R> oo <- xts(output[,"value"], order.by=output[,"date"]) 
R> oo 
       [,1] 
2011-01-01 8.29916 
2011-01-08 44.82950 
2011-01-15 72.08662 
2011-01-22 134.19277 
2011-01-29 221.67744 
2011-02-05 245.77195 
2011-02-12 314.82081 
2011-02-19 396.34661 
2011-02-26 437.14286 
2011-03-05 442.41321 
R> oo["2011-02-01::2011-02-28"] 
       [,1]     
2011-02-05 245.772 
2011-02-12 314.821 
2011-02-19 396.347 
2011-02-26 437.143 
R> 

편리한 날짜가 :

R> output <- data.frame(date=seq(as.Date("2011-01-01"), by=7, length=10), 
+      value=cumsum(runif(10)*100)) 
R> output 
     date  value 
1 2011-01-01 8.29916 
2 2011-01-08 44.82950 
3 2011-01-15 72.08662 
4 2011-01-22 134.19277 
5 2011-01-29 221.67744 
6 2011-02-05 245.77195 
7 2011-02-12 314.82081 
8 2011-02-19 396.34661 
9 2011-02-26 437.14286 
10 2011-03-05 442.41321 
R> output[ output[,"date"] >= as.Date("2011-02-01") & 
+   output[,"date"] <= as.Date("2011-02-28"), ] 
     date value 
6 2011-02-05 245.772 
7 2011-02-12 314.821 
8 2011-02-19 396.347 
9 2011-02-26 437.143 
R> 

또 다른 방법은 XTS 패키지 사용 인덱스에 대한 파싱; 자세한 내용은 패키지 설명서를 참조하십시오.

3

1:12의 정수입니다. 난 당신이 약식 월 이름을 사용하는 것이 더 의심 : 달의 수가 0 패딩과 "1" != "01" 때문에이 방법이 작동하지

value <- month.abb[k] 
output <- which(strftime(dataset[,1],"%b")==value,dataset[,1]) 

이유입니다.

+0

예 (1 ~ 12)입니다. 잊어 버렸습니다. 정말 기본적인 실수였습니다. 저는 01에서 12까지, 1에서 12까지를 잊어 버렸습니다. 덕분에! –

2

또한 날짜 처리 기능을 제공하는 등의 대하, lubridate 및 GDATA 등 여러 가지 다른 패키지가 있습니다 POSIXlt()$mon

as.POSIXlt(output$date)$mon # Note that Jan = 0 and Feb=1 
[1] 0 0 0 0 0 1 1 1 1 2 

과 날짜로 날짜를 사용할 수 있습니다. 나는 특히 직관적이고 내 서투른 손에있는 오류에 덜 취약한 윤활유의 기능을 발견했습니다.

+0

+1 - 그건 좋은 코멘트지만 POSIX 월 표현에 대해 내가 싫어하는 한 가지는 0에서 11까지의 범위입니다. C 프로그램 수준에서는 괜찮습니까? –

관련 문제