私は、30分ごとにサンプリングされた時系列を含むデータフレームを持っています(2016年)。毎週水曜日10:30:30を含むサブセットを作成する必要があります。週に週末がWednedayになると、毎週木曜日に11:00:00に休日が含まれていれば、週末はWednedayになります。これにより、EIA石油週間レポートのスケジュールが作成されます。私はxtsを使いたくない。時系列を週番号(N)のリストで条件付きでフィルタリングする
私はその日の曜日と時刻でサブセットする方法を知っています。しかし、私は日付のリストに存在する日付を含む週に条件付きをサブセット化する方法を知らない。どうすればいい?
以下のコードは、休日でフィルタリングすることなく、一日の曜日と時刻によってサブセットを作成します。また、フィルタとして使用する祝日のリストも含まれています。
#Make time sequence every 30mins with Time & DayWk columns
Calendar30mn <- as.data.frame(seq(as.POSIXlt("2016/1/1 00:00:00"), as.POSIXlt("2016/12/31 23:59:59"), by="30 mins"))
colnames(Calendar30mn) <- "DateTime"
Calendar30mn$Time <- strftime(Calendar30mn$DateTime, format="%H:%M:%S")
Calendar30mn$DayWk <- weekdays(Calendar30mn$DateTime)
#List of US Federal holidays falling on Sunday/Monday/Tuesday/Wedneday
FedHolidaysSuntoWed <- structure(c(16818, 16846, 16951, 16986, 17049, 17161, 17084), class = "Date")
-----
#Subset for Wednesday 10:30:00
EIAOildates1 <- subset (Calendar30mn, Time == "10:30:00" & DayWk == "Wednesday")
#Subset for Thursday 11:00:00
EIAOildates2 <- subset (Calendar30mn, Time == "11:00:00" & DayWk == "Thursday")
#Bind subsets and set reverse order (most recent at the top)
EIAOildates <- rbind(EIAOildates1, EIAOildates2)
上記コード水曜日午前10時30分00秒のためのサブセットを含むEIAOildates1
を生成します。そのサブセットには、その週のいずれかの日がFedHolidaysSuntoWed
に存在しない場合は、水曜日の10:30:30のみが含まれています。そして、逆さまはEIAOildates2
です。
私は、私は完全にあなたの質問を理解していないけど、あなたが使用することができれば、私は思っていました'lubridate'パッケージは、より具体的には' week'関数を使って週番号を生成します(例えば1から52/53)。曜日と週番号の両方を指定すると、データをグループ化できます。これがあなたが探しているものかどうかはわかりません。 – steveb
ありがとうございます。それを調べます!ご迷惑をおかけして申し訳ありませんが、質問は明確ではありません。もっと明確にすることはできないと思っていますが、試してみます。 – Krug
'lubridate'には日付が指定された間隔内にあるかどうかを調べるための素晴らしい機能があります。そのビネットを確認する – PavoDive