2009-12-01 3 views
5

내가 ("2009-12"와 같은) 년과 하루 형식 % Y- %의 m로 strptime를 사용하는 경우 내가 R.R에서 strptime을 사용하여 "% Y- % m"구문 분석에서 왜 NA 결과를 얻지 만 "% Y- % m- % d"가 작동합니까?

에서 이해하지 못하는 결과를 받고 있어요는, 나는 NA 결과를 얻을. 그러나 "2009-12-01"과 같이 하루를 추가하고 그에 따라 형식 문자열을 변경하면 결과가 나옵니다. 예 :

> strptime("2009-12",format="%Y-%m") 
[1] NA 
> strptime("2009-12-03",format="%Y-%m-%d") 
[1] "2009-12-03" 

왜 그렇습니까?

업데이트 : 그것은 일년 분석 않기 때문에 strptime은 올해 한 달 구문 분석하지 않는 이유이며, 이유는 그렇게하지 않을 것이라고 이상한 것 같다 대해 궁금 해요 건입니다 단지, 또는 1 년 1 일이 몇 년이 질문 후에 질문을 받았다 중복 가능한 중복되지 않으며이 별도의 API에 관심을 왜

> strptime("2009",format="%Y") # year only. Works. Uses current month and day as defaults. 
[1] "2009-12-02" 
> strptime("2009-03",format="%Y-%d") # year and day. Works. Uses current month as default. 
[1] "2009-12-03" 
> strptime("2009-03",format="%Y-%m") # year and month. Doesn't work. ? 
[1] NA 

업데이트를 설명하는 R : asDate 기능. 이 질문은 R 3.1.3이 여전히 적용되는 strptime 기능의 기발함에 관한 것입니다.

+2

날짜는 일이 있기 때문에? 그것이 출력되기를 당신은 무엇을 기대합니까? – hadley

+0

그 해의 기념일 이었습니까? 그렇다면 "% j"을 (를) 사용해보십시오. –

+1

strptime ("2009", format = "% Y")을 수행하면 현재 날짜를 기본값으로 사용하기를 기대하고있었습니다. 결과는 "2009-12-01"입니다. – bantic

답변

1

나는 현명한 행동으로 보입니다. 내가보기에 더 나은 질문은 "왜 이렇게 할 수 있습니까? : strptime("2009-03",format="%Y-%d")?"입니다. 난 그냥 여기 추측하고있어

as.POSIXlt(paste("2009-12", days(Sys.Date()), sep="-")) 
+0

그래서 언어의 이상한 특이성이 있습니까? – bantic

+1

아니요, '날짜'로 표시되는 요구 사항은 1 년에 한 달의 날짜를 지정하며 1 개월과 1 년을주는 것은 동일하지 않습니다. –

+1

하지만 1 년 또는 1 년 1 일만 주면 왜 효과가 있습니까? – bantic

1

:

여기에 당신이 (지정된 년, 월, 그러나 오늘의 하루, 즉 POSIXlt 개체)를 달성하기 위해 노력하고 무슨 생각을 얻을 수있는 해결 방법입니다. 하지만 1 년 365 일 (1 년 365 일)의 1 년 1 일이 소요됩니다. 당신이 할 수있는 일은 paste()을 사용하고 을 끝에 덧붙여 YYYY-MM-DD 표준을 얻는 것입니다.

다음은 내가 테스트 한 것입니다.

strptime("2009-123",format="%Y-%d") 

반환 "2009-05-12"

관련 문제