Uhrzeit in 24 h Format umwandeln

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Effigy
Beiträge: 35
Registriert: Di Nov 26, 2019 11:44 am

Uhrzeit in 24 h Format umwandeln

Beitrag von Effigy »

Hallo zusammen,

ich möchte die Uhrzeit in der Variable WSDede$Time in ein 24 h Format umwandeln, also z.B statt 06:30 p -> 18:30

Code: Alles auswählen

> str (WSDede$Time)
 chr [1:15994] "2:30 a" "3:00 a" "3:30 a" "4:00 a" "4:30 a" "5:00 a" "5:30 a" "6:00 a" "6:30 a" "7:00 a" "7:30 a" ...
Ich probiere es mit folgendem Code

Code: Alles auswählen

WSDede$Time <- strptime(WSDede$Time, format = "%H:%M")
und bekomme nun diesen quatsch:

Code: Alles auswählen

> str (WSDede$Time)
 POSIXlt[1:15994], format: "2020-02-05 02:30:00" "2020-02-05 03:00:00" "2020-02-05 03:30:00" "2020-02-05 04:00:00" "2020-02-05 04:30:00" ...
Ich möchte das aktuelle Datum da nich stehen haben und verstehe nicht wieso R das macht und wie ich das wegbekomme. Wäre für jede Hilfe wie immer dankbar³.

LG,
Max
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Uhrzeit in 24 h Format umwandeln

Beitrag von bigben »

Hi!

"5:30 a" erscheint mir ein sehr ungewöhnliches Format zu sein, deshalb würde ich eher nicht versuchen, eine fertige Umwandlungsfunktion zu finden, sondern selbst eine schreiben. Beim "Doppelte Einträge entfernen" Thread habe ich Dir ja schon die Funktionen nchar und substr gezeigt und wie man damit "a" und "p" am Ende erkennt. Diesmal würde ich Dich dann auf strsplit hinweisen, womit man die Zahl vor dem Doppelpunkt erkennen kann:

Code: Alles auswählen

bsp <- c("1:30 a", "2:30 a", "10:25 a", "6:00 p")
strsplit(bsp, ":", fixed=TRUE)
Jetzt müsste man je nachdem, ob hinten ein a oder ein p steht die Zahl vor dem Doppelpunkt lassen oder 12 hinzu addieren. Kriegst Du das hin?

Vorsicht bei Stunde 0 oder 12. Da war das mit dem ante und post irgendwie verwirrend. Da musst Du nochmal rauskriegen, wie das bei Dir genau codiert ist.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Uhrzeit in 24 h Format umwandeln

Beitrag von jogo »

Hallo Max,

vielleicht könnte es so aussehen:

Code: Alles auswählen

D <- data.frame(Time=c("2:30 a", "3:00 a", "3:30 a", "4:00 a", "4:30 a", "5:00 a", 
                       "5:30 a", "6:00 a", "6:30 a", "7:00 a", "7:30 a", "8:00 a", "8:30 a", 
                       "9:00 a", "9:30 a", "10:00 a", "10:30 a", "11:00 a", "11:30 a", 
                       "12:00 p", "12:30 p", "1:00 p", "1:30 p", "2:00 p", "2:30 p", 
                       "3:00 p", "3:30 p", "4:00 p", "4:30 p", "5:00 p", "5:30 p", "6:00 p", 
                       "6:30 p", "7:00 p", "7:30 p", "8:00 p", "8:30 p", "9:00 p", "9:30 p", 
                       "10:00 p", "10:30 p", "11:00 p", "11:30 p", "12:00 a", "12:30 a", 
                       "1:00 a", "1:30 a", "2:00 a", "2:30 a", "3:00 a"), stringsAsFactors = FALSE)
S <- strsplit(D$Time, split=":| ")
M <- matrix(unlist(S), 3)
D$H <- as.numeric(M[1,])
D$M <- as.numeric(M[2,])
D$meri <- M[3,]

toH24 <- function(H, meri) {
  H[H==12 & meri=="a"] <- 0
  H[H<12 & meri=="p"] <- 12 + H[H<12 & meri=="p"] 
  H
}

D$H24 <- toH24(D$H, D$meri)
D
Gruß, Jörg
Antworten