Ich versuche, die Anzahl der Werktage zwischen zwei Daten mit dem Paket bizdays
zu berechnen. Es gab viele Posts auf der Tatsache, dass es eine gute Option ist, um Geschäftstage zwischen zwei Daten zu berechnen, aber keine Beiträge zu bestimmten Problemen während der Verwendung. Ich habe derzeit ein Problem mit der Ausgabe.Bizdays Funktion gibt falsche Werte zurück
Ich habe Daten mit Unterschieden zwischen Daten von Sekunden bis Monaten, aber unten in meinem Beispiel df, werde ich nur die Unterschiede zeigen, die weniger als ein Tag sind (das sind wo das Problem scheint entstehen).
Hier ist meine df:
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))
Wie Sie sehen können, gibt es eine dritte Säule, die eine Berechnung ohne Entfernen arbeitsfreie Tage (gut zu vergleichen, unten an den bizdays
Ausgang) hat.
Hier ist mein bizdays
Kalender:
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)
hinzufügen bizdays
Ausgabe df:
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
Ist gekommen, jemand über ein ähnliches Problem oder bin ich völlig fehlt etwas? Für die Mehrzahl der Beobachtungen rundet die Spalte bdays
die Spalte Time_in_State
korrekt auf oder ab, aber ich habe nicht herausgefunden, warum ich für einige davon -1 erhalten würde. Gibt es auch eine Möglichkeit, bizdays
Ausgabe mit Dezimalstellen (z. B. 5.5, 12.11) zu haben? Ich habe nichts im Handbuch gesehen. Vielen Dank im Voraus.
danke für die nachdenkliche antwort. Ich habe immer noch ein Problem mit anderen Daten. Mit dem obigen Kalender: 'bizdays (" 2014-10-10 11:33:00 "," 2014-10-16 10:03:00 ")' gibt 3 Arbeitstage zurück, sollte aber auf 4 runden (Freitag 11: 30 Uhr bis Donnerstag 10:03 Uhr). Wenn ich 'bizseq (" 2014-10-10 11:33:00 "," 2014-10-16 10:03:00 ")' starte, wird ein Vektor von 4 Tagen zurückgegeben. Empfehlen Sie das als Workaround für jetzt? Kann ich das mit einem Vektor von Daten zu/von verbinden? Ich werde versuchen, zu experimentieren. – Tunn
Für jetzt würde ich vorschlagen, 1 zu "bizdays" zurückzukehren. 'bizdays' den Unterschied zwischen zwei Daten, so dass, wenn Sie' bizdays ("2014-10-10 11:33:00", "2014-10-11 11:33:00") aufrufen '' 1 statt 2, aber Wenn Sie 'bizseq (" 2014-10-10 11:33:00 "," 2014-10-11 11:33:00 ") aufrufen, wird eine Sequenz mit 2 Daten zurückgegeben. "Bizdays" wurde für finanzielle Zwecke entworfen und ich werde über neue Wege nachdenken, um es für andere Zwecke anpassbarer zu machen. –
Whoops ich verpasste Columbus Day in meinem Kommentar oben. Deine erste Antwort funktioniert großartig. Danke noch einmal. – Tunn