Wenn Sie wirklich wollen nur in "Date"
Klasse mit dem ersten des Monats zu konvertieren, dann scheint Roland Lösung am direktesten, aber es gibt einige andere Überlegungen wie, ob Sie Ende des Monats oder ob Sie wirklich verwenden möchten wollen Jahresmonate mit Datumsangaben darstellen.
Das Zoo-Paket hat eine "yearmon"
Klasse, die direkt ganz Monate darstellen kann, ohne sie zu Daten konvertieren und hat auch die as.Date.yearmon
Verfahren, das ein frac=
Argument hat, kann verwendet werden, um den Anteil des Weges durch den Monat angeben, zu konvertieren wenn Sie wollen "Date"
Klasse.
Stellen Sie zuerst sicher, dass die Daten Zeichenfolgen sind. Die Eingabe in der Frage zeigt 1993.10 als eine der Eingaben an, so dass wir sicherstellen müssen, dass es eine abschließende Null gibt. (Wenn die Eingaben bereits Zeichen mit der abschließenden Null sind, dann ist das kein Problem. Wir haben hier den schlimmsten Fall angenommen, vorausgesetzt, dass wir sie explizit in Zeichenfolgen mit einer abschließenden 0 konvertieren müssen.) Verwenden Sie jetzt as.yearmon
mit Format "%Y.%m"
. Schließlich verwenden Sie as.Date.yearmon
, um zu "Date"
Klasse zu konvertieren.
Vielleicht der größte Vorteil dieses Ansatzes besteht darin, dass wir nur das Ergebnis in "yearmon"
Klasse verlassen konnten (dh lassen Sie den "as.Date"
Teil, zB as.yearmon(sprintf("%.2f", dates))
oder wenn die Daten bereits Zeichenkette, dates.ch
, mit einer Hinter 0 im Fall von "1993.10"
dann nur as.yearmon(dates.ch, "%Y.%m")
, was wirklich darzustellen, was Sie besser haben seit dem Tag nicht wirklich sinnvoll ist, da es nicht von Anfang an dabei war. "yearmon"
Objekte aufgetragen und in der erwarteten Art und Weise sortiert werden können.
Hier ist die Umstellung auf "Date"
Klasse mit "yearmon"
:
library(zoo)
dates <- c(1993.07, 1993.08, 1993.09, 1993.1, 1993.11, 1993.12) # test input
as.Date(as.yearmon(sprintf("%.2f", dates), "%Y.%m")) # 1st of month
## [1] "1993-07-01" "1993-08-01" "1993-09-01" "1993-10-01" "1993-11-01" "1993-12-01"
as.Date(as.yearmon(sprintf("%.2f", dates), "%Y.%m"), frac = 1) # last of month
## [1] "1993-07-31" "1993-08-31" "1993-09-30" "1993-10-31" "1993-11-30" "1993-12-31"
oder wenn der Testeingang wie folgt aussieht:
dates.ch <- c("1993.07", "1993.08", "1993.09", "1993.10", "1993.11", "1993.12") # input
as.Date(as.yearmon(dates.ch, "%Y.%m"))
as.Date(as.yearmon(dates.ch, "%Y.%m"), frac = 1)
Die 'dput' ist' x <- c (1993,09, 1993,1, 1993,11, 1993,12) 'aber Ihre Lösungen noch funktioniert. –
@DavidArenburg R ist es egal, wenn Sie es '1993.1' oder' 1993.10' geben. Das ist ein identisches Doppel. – Roland