2013-01-22 5 views
41

두 개의 지정된 날짜 사이에 발생한 모든 유효한 요일을 항목별로 분류하는 쉬운 방법이 있습니까? 예를 들어, 나는 다음과 같은 입력을 싶습니다두 날짜 사이의 모든 요일의 벡터 만들기

itemizeDates(startDate="12-30-11", endDate="1-4-12") 

은 다음 날짜 생산하기 : I 클래스와 날짜의 형식에 유연 해요

"12-30-11" "12-31-11", "1-1-12", "1-2-12", "1-3-12", "1-4-12" 

를, 나는 단지의 구현이 필요합니다 개념.

답변

68

당신은 seq

> seq(as.Date("2011-12-30"), as.Date("2012-01-04"), by="days") 
[1] "2011-12-30" "2011-12-31" "2012-01-01" "2012-01-02" "2012-01-03" 
[6] "2012-01-04" 

찾고 또는, :

> as.Date(as.Date("2011-12-30"):as.Date("2012-01-04"), origin="1970-01-01") 
[1] "2011-12-30" "2011-12-31" "2012-01-01" "2012-01-02" "2012-01-03" 
[6] "2012-01-04" 
다음

사용자의 특정 요구를 충족하기 위해 함수의 사용

,596,653,556,
+3

'seq.Date'. 나는 그 존재를 알지 못했다. –

+1

실제로 나는 있습니다. 당신의 도움을 주셔서 감사합니다! –

+0

나는 이것이 내가 본보다 효율적인 대답 중 하나라고 말해야한다. – d8aninja

2

나는 datetime 문제를 해결하기 위해 lubridate 패키지를 사용하는 것을 선호합니다. 일단 이해하면 직관적이고 이해하기 쉬워집니다.

library(lubridate) 
#mdy() in lubridate package means "month-day-year", which is used to convert 
#the string to date object 
>start_date <- mdy("12-30-11") 
>end_date <- mdy("1-4-12") 
#calculate how many days in this time interval 
>n_days <- interval(start_date,end_date)/days(1) 
>start_date + days(0:n_days) 
[1]"2011-12-30" "2011-12-31" "2012-01-01" "2012-01-02" "2012-01-03" "2012-01-04" 
#convert to original format 
format(start_date + days(0:n_days), format="%m-%d-%y") 
[1] "12-30-11" "12-31-11" "01-01-12" "01-02-12" "01-03-12" "01-04-12" 

참조 :도 Dates and Times Made Easy with lubridate