2014-10-18 15 views
15

मेरे पास डेट ऑब्जेक्ट्स (yyyy-mm-dd) का वेक्टर है और मैं यह निर्धारित करना चाहता हूं कि उनमें से कोई सप्ताहांत पर है या नहीं। क्या कोई ऐसा कार्य है जो इसे सीधे निर्धारित कर सकता है?यह निर्धारित करने के लिए कि दिनांक सप्ताहांत है या नहीं (लुब्र्रिडेट का उपयोग नहीं कर रहा है)

मैं lubridate पैकेज में wday() उपयोग कर सकते हैं और फिर यह निर्धारित करता है, तो दिए गए मान 01 या 07, लेकिन कुछ और अधिक सरल है?

x <- seq(Sys.Date()-10, Sys.Date(), by = 1) 
x[lubridate::wday(x) %in% c(1, 7)] 
+4

"cron" से 'is.weekend' है? – A5C1D2H2I1M1N2O1R2T1

+0

'लुब्रिडेट' दृष्टिकोण सीधे आगे क्यों नहीं है? –

+0

http://stackoverflow.com/questions/9216138/find-the-day-of-a-week-in-r – GSee

उत्तर

10

मैं एक टिप्पणी से यहां नहीं बल्कि @ AnandaMahto के सुझाव रख:

library(chron) 
x <- seq(Sys.Date()-10, Sys.Date(), by = 1) 
x[is.weekend(x)] 

## [1] "2014-10-11" "2014-10-12" "2014-10-18" 
15

आप आधार आर फ़ंक्शन weekdays() का उपयोग कर सकते हैं।

x <- seq(Sys.Date() - 10, Sys.Date(), by = 1) 
weekdays(x, abbr = TRUE) 
# [1] "Wed" "Thu" "Fri" "Sat" "Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat" 
x[grepl("S(at|un)", weekdays(x))] 
# [1] "2014-10-11" "2014-10-12" "2014-10-18" 

जहाँ तक lubridate रूप चला जाता है, wday() एक label तर्क है। TRUE पर सेट होने पर, संख्याओं के बजाय (संक्षिप्त) दिन का नाम वापस कर दिया जाता है। पूर्ण नामों में बदलने के लिए abbr तर्क का उपयोग करें।

library(lubridate) 
wday(x, label = TRUE) 
# [1] Wed Thurs Fri Sat Sun Mon Tues Wed Thurs Fri Sat 
# Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat 
+0

सरल साफ दृष्टिकोण +1 –

+3

@TylerRinker, लेकिन वातावरण निर्भर .... – A5C1D2H2I1M1N2O1R2T1

7

format और %u है, जो सप्ताह के दिन के लिए एक नंबर प्रदान करता है, "के साथ 1 शुरू करने का उपयोग करने के लिए एक और दृष्टिकोण हो सकता है "सोमवार" का प्रतिनिधित्व करते हैं।

इसी के साथ

, आप कर सकते हैं:

x <- seq(as.Date("2014-10-18")-10, Sys.Date(), by = 1) 
format(x, "%u") %in% c(6, 7) 
# [1] FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE 
x[format(x, "%u") %in% c(6, 7)] 
# [1] "2014-10-11" "2014-10-12" "2014-10-18" 
+2

सौभाग्य से, वहाँ है यह भी '% w' है जो रविवार को' 0' पर नक्शा करता है। तो हम सभी शांति में रह सकते हैं। 'data.frame (ए = प्रारूप (एक्स,"% ए "), यू = प्रारूप (एक्स,"% यू "), डब्ल्यू = प्रारूप (एक्स,"% डब्ल्यू "))'। – flodel

4
में

wday दोनों lubridate और data.table (हाँ, data.table काफी सब कुछ है, लेकिन पानी के नल है :-) दोनों पर एक बदलाव करते हैं:

as.POSIXlt(x, tz = tz(x))$wday + 1 # lubridate 
as.POSIXlt(x)$wday + 1L   # data.table 

तो तुम, सिद्धांत रूप में, बस कर सकता है:

as.POSIXlt("2014-10-18")$wday + 1 
## [1] 7 

और उसके बाद सप्ताहांत दिनों के लिए परीक्षण अन्य उत्तरों के रूप में करते हैं।

0

package timeDate से आप isWeekend का उपयोग कर सकते हैं। अधिक सरल करने के लिए मुश्किल :)। wday निर्दिष्ट करें कि कौन से दिन सप्ताहांत के रूप में माना जाना चाहिए। डिफ़ॉल्ट रूप से सोमवार से शुक्रवार तक।

> today <- isWeekend(Sys.Date(), wday = 1:5) 
if (as.logical(today)){ 
    print("YES") 
} else print("NO") 

प्रलेखन से:

## Dates in April, currentYear: 
    currentYear = getRmetricsOptions("currentYear") 
    tS = timeSequence(
     from = paste(currentYear, "-03-01", sep = ""), 
     to = paste(currentYear, "-04-30", sep = "")) 
    tS 

## Subset of Weekends: 
    isWeekend(tS) 
    tS[isWeekend(tS)] 

यह isWeekday साथ भी काम करता है।

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

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