日付オブジェクトのベクトル(_yyyy-mm-dd
_)があり、それらのいずれかが週末にあるかどうかを確認したいと思います。これをすぐに決定できる関数はありますか?
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
_
別の方法としては、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"
wday
とdata.table
の両方のlubridate
(はい、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
他の回答と同様に、週末の日をテストします。
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
でも機能します。
このトピックについてよく調べた後、RQuantLibパッケージを使用すると、このソリューションが特に簡単であることがわかりました
install.packages("RQuantLib")
library(RQuantLib)
isBusinessDay(calendar="WeekendsOnly", dates=yourdatesofinterest)
さまざまなカレンダーを使用してこのコードを変更し、週末にさまざまな国のさまざまな休日のセットを追加できます(以下に例を示しますが、もっと多くあります)。
isBusinessDay(calendar="UnitedStates", dates=yourdatesofinterest)
isBusinessDay(calendar="UnitedStates/Settlement", dates=yourdatesofinterest)
isBusinessDay(calendar="UnitedStates/NYSE", dates=yourdatesofinterest)
isBusinessDay(calendar="Sweden", dates=yourdatesofinterest)
isBusinessDay(calendar="Mexico", dates=yourdatesofinterest)
誰かのお役に立てば幸いです
Lubridateを使用して他のパッケージを回避するには、以下を使用できます。
is_weekday = function(timestamp){
lubridate::wday(timestamp, week_start = 1) < 6
}