Kapitel 59 Zeit und Daten
Wir müssen oft mit Kalenderdaten und Zeiten arbeiten, zum Beispiel um das Alter zu berechnen, oder eine Zeitdauer. Es gibt verschiedene Möglichkeiten, dies in R zu tun. Wir zeigen hier das Arbeiten mit dem Packet lubridate aus dem Tidyverse Universum.
59.1 Data
Erstellen wir zuerst ein paar Daten:
<-read.table(text="id Tag_Monat_Jahr Monat_Tag_Jahr dmy_hms dob dod date_event date_release_white_album start_rooftop_concert end_rooftop_concert
data1 28.1.2020 1.28.2020 28:01:2020:17:55:05 18.06.1942 NA 3.01.1962 22.11.1968 30.01.1969.12:30 30.01.1969.13:12
2 03.2.2019 2.3.2019 03.2.2019:09:30:10 09.10.1940 08.12.1980 3.01.1962 22.11.1968 30.01.1969.12:30 30.01.1969.13:12
3 01.12.1987 12.01.1987 01/12/1987/20:30:10 25.02.1943 29.11.2001 3.01.1962 22.11.1968 30.01.1969.12:30 30.01.1969.13:12
4 8.9.1821 9.8.1821 08:09:1821:10:45:20 7.7.1940 NA 3.01.1962 22.11.1968 30.01.1969.12:30 30.01.1969.13:12",
header=TRUE)
59.2 Hinzufügen des aktuellen Datums (ohne Uhrzeit)
<-data %>%
datamutate(date_exercise=today())
head(data)
## id Tag_Monat_Jahr Monat_Tag_Jahr dmy_hms dob dod
## 1 1 28.1.2020 1.28.2020 28:01:2020:17:55:05 18.06.1942 <NA>
## 2 2 03.2.2019 2.3.2019 03.2.2019:09:30:10 09.10.1940 08.12.1980
## 3 3 01.12.1987 12.01.1987 01/12/1987/20:30:10 25.02.1943 29.11.2001
## 4 4 8.9.1821 9.8.1821 08:09:1821:10:45:20 7.7.1940 <NA>
## date_event date_release_white_album start_rooftop_concert end_rooftop_concert
## 1 3.01.1962 22.11.1968 30.01.1969.12:30 30.01.1969.13:12
## 2 3.01.1962 22.11.1968 30.01.1969.12:30 30.01.1969.13:12
## 3 3.01.1962 22.11.1968 30.01.1969.12:30 30.01.1969.13:12
## 4 3.01.1962 22.11.1968 30.01.1969.12:30 30.01.1969.13:12
## date_exercise
## 1 2022-12-24
## 2 2022-12-24
## 3 2022-12-24
## 4 2022-12-24
59.3 Hinzufügen des aktuellen Datums und der Uhrzeit
<-data %>%
datamutate(date_time_exercise=now())
59.4 Betrachten wir die Daten, bevor wir sie in Datumsformate umwandeln
str(data)
## 'data.frame': 4 obs. of 12 variables:
## $ id : int 1 2 3 4
## $ Tag_Monat_Jahr : chr "28.1.2020" "03.2.2019" "01.12.1987" "8.9.1821"
## $ Monat_Tag_Jahr : chr "1.28.2020" "2.3.2019" "12.01.1987" "9.8.1821"
## $ dmy_hms : chr "28:01:2020:17:55:05" "03.2.2019:09:30:10" "01/12/1987/20:30:10" "08:09:1821:10:45:20"
## $ dob : chr "18.06.1942" "09.10.1940" "25.02.1943" "7.7.1940"
## $ dod : chr NA "08.12.1980" "29.11.2001" NA
## $ date_event : chr "3.01.1962" "3.01.1962" "3.01.1962" "3.01.1962"
## $ date_release_white_album: chr "22.11.1968" "22.11.1968" "22.11.1968" "22.11.1968"
## $ start_rooftop_concert : chr "30.01.1969.12:30" "30.01.1969.12:30" "30.01.1969.12:30" "30.01.1969.12:30"
## $ end_rooftop_concert : chr "30.01.1969.13:12" "30.01.1969.13:12" "30.01.1969.13:12" "30.01.1969.13:12"
## $ date_exercise : Date, format: "2022-12-24" "2022-12-24" ...
## $ date_time_exercise : POSIXct, format: "2022-12-24 19:52:18" "2022-12-24 19:52:18" ...
The variable Tag_Monat_Jahr is not yet in the correct data format.
class(data$Tag_Monat_Jahr)
## [1] "character"
Wir verwenden die Funktion skim aus dem Paket skimr: Die Variable date_exercise hat bereits das richtige Format, da wir sie mit der r-Funktion today erstellt haben.
class(data$date_exercise)
## [1] "Date"
::skim(data) skimr
Name | data |
Number of rows | 4 |
Number of columns | 12 |
_______________________ | |
Column type frequency: | |
character | 9 |
Date | 1 |
numeric | 1 |
POSIXct | 1 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
Tag_Monat_Jahr | 0 | 1.0 | 8 | 10 | 0 | 4 | 0 |
Monat_Tag_Jahr | 0 | 1.0 | 8 | 10 | 0 | 4 | 0 |
dmy_hms | 0 | 1.0 | 18 | 19 | 0 | 4 | 0 |
dob | 0 | 1.0 | 8 | 10 | 0 | 4 | 0 |
dod | 2 | 0.5 | 10 | 10 | 0 | 2 | 0 |
date_event | 0 | 1.0 | 9 | 9 | 0 | 1 | 0 |
date_release_white_album | 0 | 1.0 | 10 | 10 | 0 | 1 | 0 |
start_rooftop_concert | 0 | 1.0 | 16 | 16 | 0 | 1 | 0 |
end_rooftop_concert | 0 | 1.0 | 16 | 16 | 0 | 1 | 0 |
Variable type: Date
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
date_exercise | 0 | 1 | 2022-12-24 | 2022-12-24 | 2022-12-24 | 1 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
id | 0 | 1 | 2.5 | 1.29 | 1 | 1.75 | 2.5 | 3.25 | 4 | ▇▇▁▇▇ |
Variable type: POSIXct
skim_variable | n_missing | complete_rate | min | max | median | n_unique |
---|---|---|---|---|---|---|
date_time_exercise | 0 | 1 | 2022-12-24 19:52:18 | 2022-12-24 19:52:18 | 2022-12-24 19:52:18 | 1 |
59.5 Daten in Kalenderdaten umwandeln
59.5.1 Zunächst versuchen wir es auf die falsche Weise.
Der nächste Code wird nicht funktionieren, weil der Wert für Monate 28 sein würde, was nicht möglich ist.
$Tag_Monat_Jahr data
## [1] "28.1.2020" "03.2.2019" "01.12.1987" "8.9.1821"
mdy(data$Tag_Monat_Jahr) # does not work because 28 cannot be the months
## Warning: 1 failed to parse.
## [1] NA "2019-03-02" "1987-01-12" "1821-08-09"
59.5.2 Hier die korrekte Vorgehensweise (mit dem dplyr/tidyverse-Ansatz)
<-data %>%
datamutate(Tag_Monat_Jahr=dmy(Tag_Monat_Jahr),
Monat_Tag_Jahr=mdy(Monat_Tag_Jahr),
dmy_hms=dmy_hms(dmy_hms),
dob=dmy(dob),
dod=dmy(dod),
date_event=dmy(date_event),
date_release_white_album=dmy(date_release_white_album),
start_rooftop_concert=dmy_hm(start_rooftop_concert),
end_rooftop_concert=dmy_hm(end_rooftop_concert))
59.6 Berechnungen mit Datum und Uhrzeit
Berechnen Sie das Alter zum Zeitpunkt des Todes und das Alter zum Zeitpunkt der Erstellung dieser Übung, sowie das Alter beim Rooftop Concert.
<-data %>%
datamutate(age_at_death=time_length(interval(dob, dod), "years"),
age_at_time_of_exercise=time_length(interval(dob, date_exercise), "years"),
age_at_rooftop_concert=time_length(interval(dob, start_rooftop_concert), "years"))
Dauer des Konzertes auf dem Dach berechnen
<-data %>%
datamutate(duration_minutes_rooftop_concert=time_length(interval(start_rooftop_concert, end_rooftop_concert), "minutes"))
Berechne die Dauer zwischen der Veröffentlichung des weissen Albums und dem Konzert auf dem Dach.
<-data %>%
datamutate(interval_months_white_album_rooftop_concert=time_length(interval(date_release_white_album, start_rooftop_concert), "months"))
59.7 Elemente extrahieren
Extrahieren von Jahr, Monat, Tag, Uhrzeit vom Beginn des Dachkonzerts
<-data %>%
datamutate(year_rooftop_concert=year(start_rooftop_concert),
months_rooftop_concert=month(start_rooftop_concert),
day_rooftop_concert=mday(start_rooftop_concert),
day_in_year_rooftop_concert=yday(start_rooftop_concert),
day_in_week_rooftop_concert=wday(start_rooftop_concert),
weekday_name_rooftop_concert=wday(start_rooftop_concert, label=TRUE, abbr=FALSE))
::datatable(data, filter='top', style = 'bootstrap') DT

The Rooftop concert was in the year 1969. It was the 1. months of the year and the 30 day of the months. This was a Thursday, Thursday, Thursday, Thursday and the duration was 42.
59.8 Suche nach dem letzten Datum (Tag) eines Monats
Etwas komisch, aber wir müssen nach ceiling einen Tag abziehen um zum letzten Tag zu kommen.
<-data %>%
datamutate(date_of_the_last_day_in_the_months_where_they_played_on_rooftop=ceiling_date(start_rooftop_concert, 'month')%m-%days(1))
59.9 Suche nach dem ersten Datum (Tag) eines Monats
https://www.roelpeters.be/get-the-first-day-or-the-last-day-of-the-month-in-r-using-lubridate/
<-data %>%
datamutate(date_of_the_first_day_in_the_months_where_they_played_on_rooftop=floor_date(start_rooftop_concert, 'month')%m-%days(1))
59.10 Weitere Informationen
Weitere Informationen finden Sie hier (R for data science) oder hier (lubridate vignettes) oder auf der lubridate webpage, wo Sie den Spickzettel finden.
Wenn Sie mehr darüber erfahren möchten, ist das folgende Video sehr empfehlenswert (etwa 12 Minuten lang und mit weitaus mehr Details als ich oben angegeben habe):
Das war’s also. Mit diesen Beispielen können Sie die meisten Dinge, die Sie mit Kalenderdaten und Zeiten tun möchten, tun. Falls Sie sich fragen, was das Rooftop-Konzert war: Es war das letzte, sagen wir mal so genannte Konzert, der Beatles.
Da eine Variable das Veröffentlichungsdatum des Albums The Beatles war, das besser bekannt ist als das White Album, muss ich euch hier eine Coverversion meines Lieblingssongs von diesem Album anbieten. Diese Version ist nicht so gut wie das Original, aber es gibt ein hervorragendes Gitarrensolo von Prince (am Ende des Videos).