我有一個日期對象向量(yyyy-mm-dd
),我想確定它們中的任何一個是否在週末。有沒有一個函數可以確定這個直觀?如何確定日期是否是週末(不使用lubridate)
我可以在lubridate包中使用wday()
,然後決定是否返回的值是01
或07
,但別的更簡單?
x <- seq(Sys.Date()-10, Sys.Date(), by = 1)
x[lubridate::wday(x) %in% c(1, 7)]
我有一個日期對象向量(yyyy-mm-dd
),我想確定它們中的任何一個是否在週末。有沒有一個函數可以確定這個直觀?如何確定日期是否是週末(不使用lubridate)
我可以在lubridate包中使用wday()
,然後決定是否返回的值是01
或07
,但別的更簡單?
x <- seq(Sys.Date()-10, Sys.Date(), by = 1)
x[lubridate::wday(x) %in% c(1, 7)]
我把@ 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"
您可以使用基本R功能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
簡單幹淨的方法+1 – 2014-10-18 16:09:38
@TylerRinker,但區域依賴... – A5C1D2H2I1M1N2O1R2T1 2014-10-18 16:13:57
另一種方法可以是使用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"
幸運的是,有還有'%w'將星期天映射到'0'。所以我們都可以安居樂業。 'data.frame(a = format(x,「%a」),u = format(x,「%u」),w = format(x,「%w」))''。 – flodel 2014-10-18 16:48:58
的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
,然後測試其他答案的週末日期。
您可以使用isWeekend
從package timeDate。很難做更直接的:)。 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
。
'來自「cron」的is.weekend'? – A5C1D2H2I1M1N2O1R2T1 2014-10-18 16:07:52
爲什麼'lubridate'方法不直截了當? – 2014-10-18 16:13:05
http://stackoverflow.com/questions/9216138/find-the-day-of-a-week-in-r – GSee 2014-10-18 21:22:14