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:

data<-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
1   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<-data %>% 
  mutate(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<-data %>% 
  mutate(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"
skimr::skim(data)
Table 1.1: Data summary
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.

data$Tag_Monat_Jahr
## [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<-data %>% 
  mutate(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<-data %>% 
  mutate(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<-data %>% 
  mutate(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<-data %>% 
  mutate(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<-data %>% 
  mutate(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))

DT::datatable(data, filter='top', style = 'bootstrap')
Wir können jetzt die extrahierten Elemente hier verwenden, siehe das Bild des Codes, um r-Variablen inline im Text zu verwenden.

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<-data %>% 
  mutate(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<-data %>% 
  mutate(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).