2015-03-20 6 views
6

ऐसा लगता है कि इंटरनेट ने आर के लिए इस प्रश्न का उत्तर नहीं दिया है:पिछले रविवार को आर

यदि मेरे पास कोई तिथि है। 20 मार्च का कहना है: as.Date ("2015-03-20") मैं पिछले रविवार को आर में कैसे प्राप्त करूं? यानी, उपरोक्त उदाहरण में, दिनांक। ("2015-03-15")।

+0

धन्यवाद अपने त्वरित जवाब के लिए हर किसी के !! अगर मुझे पता था कि लोग इतनी तेजी से जवाब देंगे तो मैं इस सवाल को मेरे प्रश्न पोस्ट करने से पहले दस्तावेज पढ़ना नहीं चाहता था! –

+2

नहीं, कृपया इस निष्कर्ष पर न जाएं! –

+0

ठीक है, मैं नहीं करूँगा;) ---------------- –

उत्तर

5

यहाँ एक दृष्टिकोण है:

d <- as.Date("2015-03-18") 
prev.days <- seq(d-6,d,by='day') 
prev.days[weekdays(prev.days)=='Sunday'] 
# [1] "2015-03-15" 
9

लुब्र्रिडेट दस्तावेज़ों के माध्यम से पढ़ना, मुझे एक जवाब मिला।

library(lubridate) 
date <- as.Date("2015-03-20") 
previous_sunday <- floor_date(date, "week") 

पिछले सोमवार, मंगलवार, आदि प्राप्त करने के लिए कुछ ही दिन की अपेक्षित संख्या जोड़ें: (सोमवार के लिए)

day(date)<-day(date)+1 

और घटाना 7 दिन अगर यह मूल तारीख से अधिक है।

4

एक ही रास्ता:

d<-as.Date("2015-03-20") 
d-as.POSIXlt(d)$wday 
## [1] "2015-03-15" 

वहाँ है, यह भी अधिक hackish तरीका है, तथ्य यह है कि दिनांक शून्य दिन गुरुवार होने के साथ पूर्णांक के रूप में प्रतिनिधित्व कर रहे हैं का उपयोग कर (जनवरी 1 1970):

d-((as.numeric(d)+4)%% 7) 
## [1] "2015-03-15" 
2
cut(date_var, breaks='week', start.on.monday = F) 

गु मेरे लिए काम करता है यह आधार आर में उपलब्ध है और तेजी से बाध्य है। ब्रेक का उपयोग दिन, सप्ताह, महीना, तिमाही, वर्ष की शुरुआत के लिए किया जा सकता है।

पढ़ें ? कटौती & ? Cut.Date

Sys.Date() 

[1] "2017/12/23"

cut(Sys.Date(), breaks = 'week', start.on.monday = F) 

[1] 2017- 12-17 स्तर: 2017-12-17

cut(Sys.Date(), breaks = 'month') 

[1] 2017/12/01 स्तर: 2017-12-01

cut(Sys.Date(), breaks = 'quarter') 

[1] 2017/10/01 स्तर: 2017- 10-01

cut(Sys.Date(), breaks = 'year') 

[1] 2017/01/01 स्तर: 2017-01-01

+0

यह मुझे ऐसा करने के लिए वैचारिक तरीके की तरह लगता है। –

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