パッケージbizdays
を使用して2つの日付間の営業日数を計算しようとしています。 2つの日付の間の営業日を計算するのに使用するのは良い選択だが、特定の問題に関する投稿は使用していないという点で、多くの記事があります。私は現在、出力に問題があります。Bizdays関数が不正な値を返す
データの日付は秒から月の範囲で異なりますが、サンプルのdfの下では、1日以内の差異のみを表示します(問題が発生しているようです)。
Transition_Dates <- data.frame(Enter = as.POSIXct(c("2015-06-28 19:48:00",
"2015-06-14 04:05:00",
"2013-11-21 04:56:59",
"2016-01-16 11:18:00",
"2015-12-19 14:02:59")),
Exit = as.POSIXct(c("2015-06-28 19:48:59",
"2015-06-14 04:06:59",
"2013-11-21 10:24:00",
"2016-01-18 06:21:00",
"2015-12-19 14:11:00")),
Time_in_State = c(0.00, 0.00, 0.23, 1.79, 0.01))
はあなたが見ることができるように、(bizdays
出力に下記比較する良い)非営業日を削除せずに計算を持っている3番目の列があります:
は、ここに私のDFです。ここで
は私bizdays
カレンダーです:
library(bizdays)
library(lubridate)
Non_Working_Calendar <- Calendar(holidays = as.Date(c("2013-07-04", "2013-09-02", "2013-10-14", "2013-11-11", "2013-11-21", "2013-11-22", as.character(seq(ymd("2013-12-24"), ymd("2014-01-01"), "days")),
"2014-01-20", "2014-02-17", "2014-05-26", "2014-07-04", "2014-09-01", "2014-10-13", "2014-11-11", "2014-11-27", "2014-11-28", as.character(seq(ymd("2014-12-24"), ymd("2015-01-01"), "days")),
"2015-01-19", "2015-02-16", "2015-05-25", "2015-07-03", "2015-09-07", "2015-10-12", "2015-11-11", "2015-11-26", "2015-11-27", as.character(seq(ymd("2015-12-24"), ymd("2016-01-01"), "days")),
"2016-01-18", "2016-02-15", "2016-05-30", "2016-07-04", "2016-09-05", "2016-10-10", "2016-11-11", "2016-11-24", "2016-11-25", as.character(seq(ymd("2016-12-24"), ymd("2017-01-01"), "days")),
"2017-01-16", "2017-02-20", "2017-05-29", "2017-07-04", "2017-09-04", "2017-10-09", "2017-11-10", "2017-11-23", "2017-11-24", as.character(seq(ymd("2016-12-24"), ymd("2017-01-01"), "days")))), start.date = as.Date("2010-01-01"), end.date = as.Date("2020-01-01"), weekdays = c("saturday", "sunday"))
bizdays.options$set(default.calendar = Non_Working_Calendar)
はDFにbizdays
出力を追加します。
Transition_Dates$bdays <- bizdays(Transition_Dates$Enter, Transition_Dates$Exit)
Transition_Dates
Enter Exit Time_in_State bdays
1 2015-06-28 19:48:00 2015-06-28 19:48:59 0.00 -1
2 2015-06-14 04:05:00 2015-06-14 04:06:59 0.00 -1
3 2013-11-21 04:56:59 2013-11-21 10:24:00 0.23 -1
4 2016-01-16 11:18:00 2016-01-18 06:21:00 1.79 -1
5 2015-12-19 14:02:59 2015-12-19 14:11:00 0.01 -1
は、誰でも同様の問題に遭遇したり、私は完全に何かが欠けていていますか?大部分の観測では、bdays
列は正しくTime_in_State
列から上または下に丸められますが、これらのうちのいくつかについては-1を与える理由がわかりません。また、bizdays
の出力に小数点(例:5.5,12.11)を使用する方法はありますか?私はマニュアルには何も見ませんでした。事前にどうもありがとうございました。
ご迷惑をおかけして申し訳ありません。私はまだいくつかの他の日付で問題を抱えています。上記のカレンダーを使用すると、 'bizdays(" 2014-10-10 11:33:00 "、" 2014-10-16 10:03:00 ")'は3営業日を返しますが、 30am〜木曜日10:03)。 'bizseq(" 2014-10-10 11:33:00 "、" 2014-10-16 10:03:00 ")'を実行すると、4日のベクトルが返されます。今の回避策としてそれをお勧めしますか?これを日付ベクトルと組み合わせることはできますか?私は実験を試みます。 – Tunn
今のところ私は 'bizdays'リターンに1を加えることを提案します。 'bizdays'は2つの日付の違いで、' bizdays( "2014-10-10 11:33:00"、 "2014-10-11 11:33:00")を呼び出すと '2ではなく1を返します。 'bizseq(" 2014-10-10 11:33:00 "、" 2014-10-11 11:33:00 ")'を呼び出すと、2つの日付のシーケンスが返されます。 'bizdays'は財務的な目的のために設計されたもので、私は他の用途に合わせてよりカスタマイズ可能にするための新しい方法について考えるつもりです。 –
私は上記の私のコメントでコロンブスの日を忘れてしまった。あなたの最初の答えは素晴らしいです。再度、感謝します。 – Tunn