cut()
von der Basis R hat zwei Methoden für Objekte der Klasse Date
und POSIXt
, die davon ausgehen, dass Wochen am Montag standardmäßig starten (können aber auch bis Sonntag mit start.on.monday = FALSE
geändert werden).
dates <- c("2016-04-04", "2016-04-05", "2016-04-06", "2016-04-07", "2016-04-08",
"2016-04-09", "2016-04-10", "2016-04-11", "2016-04-12", "2016-04-13",
"2016-04-14")
result <- data.frame(
dates,
cut_Date = cut(as.Date(dates), "week"),
cut_POSIXt = cut(as.POSIXct(dates), "week"),
stringsAsFactors = FALSE)
result
# dates cut_Date cut_POSIXt
#1 2016-04-04 2016-04-04 2016-04-04
#2 2016-04-05 2016-04-04 2016-04-04
#3 2016-04-06 2016-04-04 2016-04-04
#4 2016-04-07 2016-04-04 2016-04-04
#5 2016-04-08 2016-04-04 2016-04-04
#6 2016-04-09 2016-04-04 2016-04-04
#7 2016-04-10 2016-04-04 2016-04-04
#8 2016-04-11 2016-04-11 2016-04-11
#9 2016-04-12 2016-04-11 2016-04-11
#10 2016-04-13 2016-04-11 2016-04-11
#11 2016-04-14 2016-04-11 2016-04-11
Beachten Sie, dass cut()
kehrt Faktoren, die für die Aggregation perfekt ist, wie durch die OP angefordert:
str(result)
#'data.frame': 11 obs. of 3 variables:
# $ dates : chr "2016-04-04" "2016-04-05" "2016-04-06" "2016-04-07" ...
# $ cut_Date : Factor w/ 2 levels "2016-04-04","2016-04-11": 1 1 1 1 1 1 1 2 2 2 ...
# $ cut_POSIXt: Factor w/ 2 levels "2016-04-04","2016-04-11": 1 1 1 1 1 1 1 2 2 2 ...
jedoch mit ggplot2
aggregierten Werte für das Plotten (und wenn es eine große Anzahl von Wochen ist, die vielleicht Unordnung der Achse) Es könnte besser sein, von einer diskreten Zeitskala zu einer kontinuierlichen Zeitskala zu wechseln. Dann ist es notwendig, Faktoren zurück zu Date
oder POSIXct
zu zwingen:
as.Date(as.character(result$cut_Date))
as.POSIXct(as.character(result$cut_Date))
Mögliches Duplikat [R: Wie Datum in der gleichen Woche beurteilen] (http://stackoverflow.com/questions/43775261/r- How-to-Judgement-Datum-in-der-gleichen-Woche) – Uwe
Scheint wie [dies] (http://stackoverflow.com/questions/26160117/changing-lubridate-function-to-start-on-monday-rather -than-sunday) könnte helfen. –
können Sie einfach den 'wday' von Ihrem Datum subtrahieren. 'lubridate' und' data.table' haben Implementierungen dieser Funktion. – MichaelChirico