Seite 1 von 1

Umwandlung von Strings in Datum

Verfasst: Do Jan 17, 2019 12:18 pm
von benne
Hallo allerseits,

im Augenblick stehe ich vor einem Problem, das ich im Grunde für total simpel halte.
Aber irgendwie kriege ich es nicht hin.

Ich bekomme regelmäßig Quartalsdaten der Bundesagentur für Arbeit geliefert, habe also keinen Einfluss auf Datensatzstruktur und Vorgaben bei den Inhalten. In der ersten Spalte jedes Datensatzes steht der Zeitbezug in der Form "März 2018", "Juni 2018", "September 2018" usw.
Aus diesen Zeichenketten möchte ich gerne "richtige" Datumsangaben machen.
Also "31.03.2018", "30.06.2018" bzw. "31.12.2018".

In einem anderen Zusammenhang hatte ich auch schon mit einer ähnlichen Konvertierung zu tun.
Da ging es allerdings darum eine Zeichenkette der Form "20181231" als gültiges Datum zu formatieren.
Dabei hatte ich mir ein eigenes Datumsformat angelegt in der Form:

Code: Alles auswählen

methods::setClass('Date_YYYYMMDD')
methods::setAs("character", "Date_YYYYMMDD", function(from) as.Date(from, format="%Y%m%d"))
Jetzt bin ich - offensichtlich zu blauäugig - mit dem folgenden Datumsformat auf den Zeitbezug "losgegangen".

Code: Alles auswählen

methods::setClass('DATE_MONTH_YEAR')
methods::setAs("character", "DATE_MONTH_YEAR", function(from) as.Date(from, format="%B %Y"))
Als Ergebnis bekomme ich aber nur "NA" und kein Datum. :)

Ich hab' die ganze Zeit das dumpfe Gefühl, dass ich einen elementaren Denkfehler begehe, weiß aber nicht genau wo.
Kann mir jemand auf die Sprünge helfen?
Das wäre klasse.

Schönen Gruß
Benne

Re: Umwandlung von Strings in Datum

Verfasst: Do Jan 17, 2019 3:44 pm
von benne
So, jetzt kann ich meine eigene Frage beantworten:

Im readr-Paket gibt es die Funktion parse_date, die einen vorgegebenen String mittels einer passenden Formatbeschreibung in ein Datum umwandelt.
Da ich hier mit Quartalsdaten hantiere, habe ich mir dann noch den Tag als Wert gespart und mit dem folgenden Codeschnipsel wird aus "Dezember 2018" das Datum "201812":

Code: Alles auswählen

  ...
  ) %>%
  mutate(
    Zeitbezug = format(parse_date(Zeitbezug, "%B %Y", locale=locale("de")),"%Y%m")
  ) %>%
  ...
Vielleicht stolpert ja der ein oder andere ebenfalls über dieses Problem und kann dann dieses Beispiel nutzen.

Schönen Gruß
Benne