2013-01-22 33 views
41

Có cách nào dễ dàng trong R cho tôi để phân loại tất cả các ngày hợp lệ xảy ra giữa hai ngày được chỉ định không? Ví dụ, tôi muốn các đầu vào sau:Tạo một Vector của tất cả các ngày giữa hai ngày

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

Để sản xuất những ngày sau:

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

Tôi linh hoạt trên lớp học và định dạng của ngày, tôi chỉ cần một thực hiện các khái niệm.

Trả lời

68

Bạn đang tìm kiếm 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" 

Hoặc, bạn có thể sử dụng :

> 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" 

Dưới đây là một chức năng để đáp ứng yêu cầu cụ thể của bạn

itemizeDates <- function(startDate="12-30-11", endDate="1-4-12", 
         format="%m-%d-%y") { 
    out <- seq(as.Date(startDate, format=format), 
      as.Date(endDate, format=format), by="days") 
    format(out, format) 
} 

> itemizeDates(startDate="12-30-11", endDate="1-4-12") 
[1] "12-30-11" "12-31-11" "01-01-12" "01-02-12" "01-03-12" "01-04-12" 
+3

'seq.Date' chẵn. Tôi không nhận thức được sự tồn tại của nó. –

+1

Thực vậy tôi. Cảm ơn bạn đã giúp đỡ! –

+0

Tôi phải nói, đây là một trong những câu trả lời hiệu quả hơn mà tôi từng thấy – d8aninja

2

Tôi thích sử dụng gói lubridate để giải quyết các vấn đề về datetime. Nó trực quan và dễ hiểu và dễ sử dụng hơn khi bạn biết.

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" 

tham khảo: Dates and Times Made Easy with lubridate

Các vấn đề liên quan