2013-01-22 15 views
41

क्या दो निर्दिष्ट तिथियों के बीच होने वाले सभी वैध दिनों को आइटम करने के लिए मेरे लिए आर में कोई आसान तरीका है? उदाहरण के लिए, मैं निम्नलिखित आदानों चाहते हैं:दो तिथियों के बीच सभी दिनों का एक वेक्टर बनाएं

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

निम्नलिखित तारीखों का उत्पादन करने के लिए:

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

यहाँ अपने विशेष अनुरोध को पूरा करने के लिए एक समारोह है का उपयोग कर सकते

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' भी। मैं इसके अस्तित्व से अवगत नहीं था। –

+1

वास्तव में मैं हूं। आपकी सहायताके लिए धन्यवाद! –

+0

मुझे कहना होगा, यह मैंने देखा है कि अधिक कुशल उत्तरों में से एक है – d8aninja

2

मैं डेटाटाइम समस्याओं को हल करने के लिए लुब्र्रिडेट पैकेज का उपयोग करना पसंद करता हूं। एक बार जब आप इसे जानते हैं तो इसे समझने और उपयोग करने में अधिक सहज और आसान होता है।

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

संबंधित मुद्दे